Delve into the world of graphics and game development. Discuss creating stunning visuals, optimizing game mechanics, and share resources for game developers.

All subtopics

Post

Replies

Boosts

Views

Activity

Znear For RealityView to prevent Entity from Hiding an attachment SwiftUI Button in VisionOS
I have an app which have an Immersive Space view and it needs the user to have a button in the bottom which have a fixed place in front of the user head like a dashboard in game or so but when the user get too close to any3d object in the view it could cover the button and make it inaccessible and it mainly would prevent the app for being approved like that in appstoreconnect I was working before on SceneKit and there was something like camera view Znear and Zfar which decide when to hide the 3d model if it comes too close or gets too far and I wonder if there is something like that in realityView / RealityKit 4. Here is My Code and the screenshots follows import SwiftUI import RealityKit struct ContentView: View { @State var myHead: Entity = { let headAnchor = AnchorEntity(.head) headAnchor.position = [-0.02, -0.023, -0.24] return headAnchor }() @State var clicked = false var body: some View { RealityView { content, attachments in // create a 3d box let mainBox = ModelEntity(mesh: .generateBox(size: [0.1, 0.1, 0.1])) mainBox.position = [0, 1.6, -0.3] content.add(mainBox) content.add(myHead) guard let attachmentEntity = attachments.entity(for: "Dashboard") else {return} myHead.addChild(attachmentEntity) } attachments: { // SwiftUI Inside Immersivre View Attachment(id: "Dashboard") { VStack { Spacer() .frame(height: 300) Button(action: { goClicked() }) { Text(clicked ? "⏸️" : "▶️") .frame(maxWidth: 48, maxHeight: 48, alignment: .center) .font(.extraLargeTitle) } .buttonStyle(.plain) } } } } func goClicked() { clicked.toggle() } }
2
0
587
Sep ’24
Exception while creating a PhotogrammetrySession object with PhotogrammetrySamples
Hi, I am trying to use PhotogrammetrySample input sequence according to the WWDC video. I modified only the following code in the sample: var images = try FileManager.default.contentsOfDirectory(at: captureFolderManager.imagesFolder, includingPropertiesForKeys: nil, options: .skipsHiddenFiles) let inputSequence = images.lazy.compactMap { file in return self.loadSampleAndMask(file: file) } // Next line causes the exception photogrammetrySession = try PhotogrammetrySession( input: inputSequence, configuration: configuration) private func loadSampleAndMask(file: URL) -> PhotogrammetrySample? { do { var sample = try PhotogrammetrySample(contentsOf: file) return sample } catch { return nil } } I am getting following runtime error: Thread 1: EXC_BREAKPOINT (code=1, subcode=0x240d88904)
0
0
287
Sep ’24
Possible error in export to USDC
Hello. I have an application that exports a 3D object with vertex color to USDC. I'm using an MDLAsset and its functionality to export to USDC with [asset exportAssetToURL:[NSURL fileURLWithPath:filePath]]. In version 1.3 of the system, everything works correctly. But after updating to version 2.0, the exported object appears white (using the same code). Any suggestions? Thank you very much.
0
0
280
Sep ’24
sceneUnderstanding occlusion not work with blendMode = alpha in ios 18
If I import a USDZ model with blendMode set to alpha, occlusion does not work on iPhone with iOS 18. How should transparent materials and occlusion be properly used in the new RealityKit? Additionally, new artifacts have appeared when working with transparent objects overlapping each other. The transparency results do not blend but rather parts of the model just not rendering.
6
0
674
Sep ’24
Apple.Gamekit tar package won't build with UnityPlugins
I have followed the documentation to download the UnityPlugins from https://github.com/apple/unityplugins. When I run through the quick guide to create the .tgz builds it builds all the packages except for the Apple.GameKit package, which is the one I need. It looks like during the build process there is a build failure which is likely causing this issue I will post the code below. This is blocking me and I have tried multiple times to the same result. (I removed some of the code error because it was too long just showing start and finish) Building Release GameKit native libraries for platform: iOS Build command: xcodebuild -scheme iOS - Release -destination generic/platform=iOS clean build ** BUILD FAILED ** The following build commands failed: SwiftCompile normal arm64 Compiling\ GKAchievementDescription.swift,\ GKLeaderboard.swift,\ GKTurnBasedMatchmakerViewControllerDelegate.swift,\ GKChallengeDelegate.swift,\ GKMatchDelegate.swift,\ GKMatchmakerViewControllerDelegate.swift,\ GKInvite.swift,\ GKChallenge.swift,\ DefaultHandlers.swift,\ GKTurnBasedParticipant.swift,\ GKLocalPlayerListener.swift,\ GKGameCenterViewController.swift,\ GKSavedGameDelegate.swift,\ GKAccessPoint.swift,\ GKBasePlayer.swift,\ GKAchievementChallenge.swift,\ GKLeaderboardEntry.swift,\ GKTurnBasedExchangeReply.swift,\ GKTurnBasedMatchmakerViewController.swift,\ AppleCoreRuntimeShared.swift,\ GKErrorCodeExtension.swift,\ GKMatchmaker.swift,\ GKTurnBasedExchange.swift,\ GKNotificationBanner.swift,\ GKScoreChallenge.swift,\ GKLocalPlayer.swift,\ GKLeaderboardSet.swift,\ GKSavedGame.swift,\ GKMatchRequest.swift,\ GKMatch.swift,\ GKAchievement.swift,\ GKVoiceChat.swift,\ GKTurnBasedMatchDelegate.swift,\ UiUtilities.swift,\ GKTurnBasedMatch.swift,\ GKMatchmakerViewController.swift,\ GameKitUIDelegateHandler.swift,\ GKPlayer.swift,\ GKInviteDelegate.swift /Users/brookehowell/Downloads/apple/unityplugins/plug-ins/Apple.GameKit/Native/GameKitWrapper/GKAchievementDescription.swift /Users/brookehowell/Downloads/apple/unityplugins/plug-ins/Apple.GameKit/Native/GameKitWrapper/GKLeaderboard.swift /Users/brookehowell/Downloads/apple/unityplugins/plug-ins/Apple.GameKit/Native/GameKitWrapper/GKTurnBasedMatchmakerViewControllerDelegate.swift /Users/brookehowell/Downloads/apple/unityplugins/plug-ins/Apple.GameKit/Native/GameKitWrapper/GKChallengeDelegate.swift /Users/brookehowell/Downloads/apple/unityplugins/plug-ins/Apple.GameKit/Native/GameKitWrapper/GKMatchDelegate.swift /Users/brookehowell/Downloads/apple/unityplugins/plug-ins/Apple.GameKit/Native/GameKitWrapper/GKMatchmakerViewControllerDelegate.swift /Users/brookehowell/Downloads/apple/unityplugins/plug-ins/Apple.GameKit/Native/GameKitWrapper/GKInvite.swift /Users/brookehowell/Downloads/apple/unityplugins/plug-ins/Apple.GameKit/Native/GameKitWrapper/GKChallenge.swift /Users/brookehowell/Downloads/apple/unityplugins/plug-ins/Apple.GameKit/Native/GameKitWrapper/DefaultHandlers.swift /Users/brookehowell/Downloads/apple/unityplugins/plug-ins/Apple.GameKit/Native/GameKitWrapper/GKTurnBasedParticipant.swift /Users/brookehowell/Downloads/apple/unityplugins/plug-ins/Apple.GameKit/Native/GameKitWrapper/GKLocalPlayerListener.swift /Users/brookehowell/Downloads/apple/unityplugins/plug-ins/Apple.GameKit/Native/GameKitWrapper/GKGameCenterViewController.swift /Users/brookehowell/Downloads/apple/unityplugins/plug-ins/Apple.GameKit/Native/GameKitWrapper/GKSavedGameDelegate.swift /Users/brookehowell/Downloads/apple/unityplugins/plug-ins/Apple.GameKit/Native/GameKitWrapper/GKAccessPoint.swift /Users/brookehowell/Downloads/apple/unityplugins/plug-ins/Apple.GameKit/Native/GameKitWrapper/GKBasePlayer.swift /Users/brookehowell/Downloads/apple/unityplugins/plug-ins/Apple.GameKit/Native/GameKitWrapper/GKAchievementChallenge.swift /Users/brookehowell/Downloads/apple/unityplugins/plug-ins/Apple.GameKit/Native/GameKitWrapper/GKLeaderboardEntry.swift /Users/brookehowell/Downloads/apple/unityplugins/plug-ins/Apple.GameKit/Native/GameKitWrapper/GKTurnBasedExchangeReply.swift /Users/brookehowell/Downloads/apple/unityplugins/plug-ins/Apple.GameKit/Native/GameKitWrapper/GKTurnBasedMatchmakerViewController.swift /Users/brookehowell/Downloads/apple/unityplugins/plug-ins/Apple.GameKit/Native/GameKitWrapper/AppleCoreRuntimeShared.swift /Users/brookehowell/Downloads/apple/unityplugins/plug-ins/Apple.GameKit/Native/GameKitWrapper/GKErrorCodeExtension.swift /Users/brookehowell/Downloads/apple/unityplugins/plug-ins/Apple.GameKit/Native/GameKitWrapper/GKMatchmaker.swift /Users/brookehowell/Downloads/apple/unityplugins/plug-ins/Apple.GameKit/Native/GameKitWrapper/GKTurnBasedExchange.swift /Users/brookehowell/Downloads/apple/unityplugins/plug-ins/Apple.GameKit/Native/GameKitWrapper/GKNotificationBanner.swift /Users/brookehowell/Downloads/apple/unityplugins/plug-ins/Apple.GameKit/Native/GameKitWrapper/GKScoreChallenge.swift /Users/brookehowell/Downloads/apple/unityplugins/plug-ins/Apple.GameKit/Native/GameKitWrapper/GKLocalPlayer.swift /Users/brookehowell/Downloads/apple/unityplugins/plug-ins/Apple.GameKit/Native/GameKitWrapper/GKLeaderboardSet.swift /Users/brookehowell/Downloads/apple/unityplugins/plug-ins/Apple.GameKit/Native/GameKitWrapper/GKSavedGame.swift /Users/brookehowell/Downloads/apple/unityplugins/plug-ins/Apple.GameKit/Native/GameKitWrapper/GKMatchRequest.swift /Users/brookehowell/Downloads/apple/unityplugins/plug-ins/Apple.GameKit/Native/GameKitWrapper/GKMatch.swift /Users/brookehowell/Downloads/apple/unityplugins/plug-ins/Apple.GameKit/Native/GameKitWrapper/GKAchievement.swift /Users/brookehowell/Downloads/apple/unityplugins/plug-ins/Apple.GameKit/Native/GameKitWrapper/GKVoiceChat.swift /Users/brookehowell/Downloads/apple/unityplugins/plug-ins/Apple.GameKit/Native/GameKitWrapper/GKTurnBasedMatchDelegate.swift /Users/brookehowell/Downloads/apple/unityplugins/plug-ins/Apple.GameKit/Native/GameKitWrapper/UiUtilities.swift /Users/brookehowell/Downloads/apple/unityplugins/plug-ins/Apple.GameKit/Native/GameKitWrapper/GKTurnBasedMatch.swift /Users/brookehowell/Downloads/apple/unityplugins/plug-ins/Apple.GameKit/Native/GameKitWrapper/GKMatchmakerViewController.swift /Users/brookehowell/Downloads/apple/unityplugins/plug-ins/Apple.GameKit/Native/GameKitWrapper/GameKitUIDelegateHandler.swift /Users/brookehowell/Downloads/apple/unityplugins/plug-ins/Apple.GameKit/Native/GameKitWrapper/GKPlayer.swift /Users/brookehowell/Downloads/apple/unityplugins/plug-ins/Apple.GameKit/Native/GameKitWrapper/GKInviteDelegate.swift (in target 'GameKitWrapper iOS' from project 'GameKitWrapper') CompileSwift normal arm64 (in target 'GameKitWrapper iOS' from project 'GameKitWrapper') (2 failures)
1
1
428
Sep ’24
Metal addCompletedHandler causes crash with Swift 6 (iOS)
The following code runs fine when compiled with Swift 5, but crashes when compiled with Swift 6 (stack trace below). In the draw method, commenting out the addCompletedHandler line fixes the problem. I'm testing on iOS 18.0 and see the same behavior in both the simulator and on a device. What's going on here? import Metal import MetalKit import UIKit class ViewController: UIViewController { @IBOutlet var metalView: MTKView! private var commandQueue: MTLCommandQueue? override func viewDidLoad() { super.viewDidLoad() guard let device = MTLCreateSystemDefaultDevice() else { fatalError("expected a Metal device") } self.commandQueue = device.makeCommandQueue() metalView.device = device metalView.enableSetNeedsDisplay = true metalView.isPaused = true metalView.delegate = self } } extension ViewController: MTKViewDelegate { func mtkView(_ view: MTKView, drawableSizeWillChange size: CGSize) {} func draw(in view: MTKView) { guard let commandQueue, let commandBuffer = commandQueue.makeCommandBuffer() else { return } commandBuffer.addCompletedHandler { _ in } // works with Swift 5, crashes with Swift 6 commandBuffer.commit() } } Here's the stack trace: Thread 10 Queue : connection Queue (serial) #0 0x000000010581c3f8 in _dispatch_assert_queue_fail () #1 0x000000010581c384 in dispatch_assert_queue () #2 0x00000002444c63e0 in swift_task_isCurrentExecutorImpl () #3 0x0000000104d71ec4 in closure #1 in ViewController.draw(in:) () #4 0x0000000104d71f58 in thunk for @escaping @callee_guaranteed (@guaranteed MTLCommandBuffer) -> () () #5 0x0000000105ef1950 in __47-[CaptureMTLCommandBuffer _preCommitWithIndex:]_block_invoke_2 () #6 0x00000001c50b35b0 in -[MTLToolsCommandBuffer invokeCompletedHandlers] () #7 0x000000019e94d444 in MTLDispatchListApply () #8 0x000000019e94f558 in -[_MTLCommandBuffer didCompleteWithStartTime:endTime:error:] () #9 0x000000019e95352c in -[_MTLCommandQueue commandBufferDidComplete:startTime:completionTime:error:] () #10 0x0000000226ef50b0 in handleMainConnectionReplies () #11 0x00000001800c9690 in _xpc_connection_call_event_handler () #12 0x00000001800cad90 in _xpc_connection_mach_event () #13 0x000000010581a86c in _dispatch_client_callout4 () #14 0x0000000105837950 in _dispatch_mach_msg_invoke () #15 0x0000000105822870 in _dispatch_lane_serial_drain () #16 0x0000000105838c10 in _dispatch_mach_invoke () #17 0x0000000105822870 in _dispatch_lane_serial_drain () #18 0x00000001058237b0 in _dispatch_lane_invoke () #19 0x00000001058301f0 in _dispatch_root_queue_drain_deferred_wlh () #20 0x000000010582f75c in _dispatch_workloop_worker_thread () #21 0x00000001050abb74 in _pthread_wqthread ()
3
1
494
Sep ’24
Leaderboard not updating immediately after submitting score via GameKit API
Hello, I’m working with the GameKit API, and I am encountering an issue when submitting a player’s score to a leaderboard at the end of a game. Goal: After submitting the new score to a leaderboard, I want to immediately fetch and display the updated leaderboard that reflects the new score. Problem: After successfully submitting the player’s score, when I fetch the leaderboard, the entries are not updated right away. The fetched leaderboard still shows the outdated player score. Is this delay in updating the leaderboard expected behavior, or am I missing something in my implementation? Steps to Reproduce: Submit the local player’s score to Leaderboard X. On successful submission, fetch the leaderboard entries for Leaderboard X. Expected Result: The fetched leaderboard should reflect the updated player score immediately. Actual Result: The fetched leaderboard shows the outdated score, with no immediate update. As a workaround, I update the leaderboard myself locally, that does the job, but is error-prone and require more efforts.
2
0
346
Sep ’24
Feedback on IOS 18
I am sure others will agree with me on this. I personally don’t like the way the new reactions look. Too many different color for the reactions. I honestly prefer the old grey version for the reactions to text messages. The extra emoji thing is okay but the change in color for the heart, thumbs up and the other reactions are not the best. Auto correct is horrible in this new update by the way
2
2
683
Sep ’24
Setting a timeout in GKTurnBasedMatch doesn't work... GKTurnBasedParticipant.timeoutDate is always nil.
I have created a turn based game using GameKit. Everything is pretty much done, last thing left to do is the turn time out. I am passing GKTurnTimeoutDefault into the timeout argument in: func endTurn(withNextParticipants nextParticipants: [GKTurnBasedParticipant], turnTimeout timeout: TimeInterval, match matchData: Data) However when I check the .timeoutDate property of the GKTurnBasedParticipant participants, the value is always nil. What am I doing wrong? Am I checking the right property or is there another one instead that I don't know about? I have tried passing different values to the timeout parameter but the timeoutDate is always nil. Has anyone successfully implemented a timeout using GKTurnBasedMatch ?
1
0
326
Sep ’24
Getting vector3 or vector4 per-vertex data into Shader Graph Editor
Hi, I'm trying to understand how I can get 3- or 4-channel per-vertex data into the Graph Editor. From my tests, it seems that: the "Geometric Property" node does not give access to 4-channel data, "Geometric Property (vector3)" does not give me access to custom properties besides the ones defined in MaterialX core the "Texture Coordinates" node has a vector4f mode (yay!), but according to MaterialX spec, texcoords must have 2 or 3 channels, and I can't get 4-channel data to show up there either. My assumption so far is that I must be missing some "magic" – for example, do the primvars in a file have to be in a specific order, independent of their names? Or do their names matter? (E.g. convention would be primars:st and primvars:st1 and so on) Unfortunately the forum doesn't allow me to attach any USDZ or ZIP files or GDrive links; if there's a way to share a test file I'm happy to do so!
0
0
336
Sep ’24
vImageConverter_CreateWithCGImageFormat Fails with kvImageInvalidImageFormat When Trying to Convert CMYK to RGB
So I get JPEG data in my app. Previously I was using the higher level NSBitmapImageRep API and just feeding the JPEG data to it. But now I've noticed on Sonoma If I get a JPEG in the CMYK color space the NSBitmapImageRep renders mostly black and is corrupted. So I'm trying to drop down to the lower level APIs. Specifically I grab a CGImageRef and and trying to use the Accelerate API to convert it to another format (to hopefully workaround the issue... CGImageRef sourceCGImage = `CGImageCreateWithJPEGDataProvider(jpegDataProvider,` NULL, shouldInterpolate, kCGRenderingIntentDefault); Now I use vImageConverter_CreateWithCGImageFormat... with the following values for source and destination formats: Source format: (derived from sourceCGImage) bitsPerComponent = 8 bitsPerPixel = 32 colorSpace = (kCGColorSpaceICCBased; kCGColorSpaceModelCMYK; Generic CMYK Profile) bitmapInfo = kCGBitmapByteOrderDefault version = 0 decode = 0x000060000147f780 renderingIntent = kCGRenderingIntentDefault Destination format: bitsPerComponent = 8 bitsPerPixel = 24 colorSpace = (DeviceRBG) bitmapInfo = 8197 version = 0 decode = 0x0000000000000000 renderingIntent = kCGRenderingIntentDefault But vImageConverter_CreateWithCGImageFormat fails with kvImageInvalidImageFormat. Now if I change the destination format to use 32 bitsPerpixel and use alpha in the bitmap info the vImageConverter_CreateWithCGImageFormat does not return an error but I get a black image just like NSBitmapImageRep
12
0
710
Sep ’24
Metal os_log not working
I wanted to try the new logging feature for Metal but could not get it to work. I modified the PerformingCalculationsOnAGPU example by adding os_log_default.log_debug("Hello thread: %d", index); to log the current thread id. But never saw any messages neither in the console nor in Xcode. I also added the -fmetal-enable-logging flag. I am running the Sequoia release candidate 15.0 (24A335) on M1 Max and Xcode 16.0 (16A242). What am I missing?
2
0
458
Sep ’24
How can I pause ARView?
In my app, I have an ARView that has cameraMode set to nonAR. I occasionally hide the ARView when it is not needed and reveal it again later. While the ARView is hidden, I'd like to pause the animation to save iPhone battery life. I'd also like to do this when I know that animation in my scene has paused and the contents of the view, although still visible, is static. This was possible using SceneKit, but I can't seem to find an equivalent way to do it using RealityKit. At least as of iOS 18, a hidden ARView with an empty scene appears to use approximately 30% of the CPU. How can I pause ARView so that it won't use the battery unnecessarily? Thank you for considering this question.
2
0
509
Sep ’24
SKTexture initialized with system UIImage has slightly wrong aspect ratio and ignores system symbol color
On macOS, system symbols displays in a SKTexture as expected, with the correct color and aspect ratio. But on iOS they are always displayed in black, and sometimes with slightly wrong aspect ratio. Is there a solution to this problem? import SpriteKit #if os(macOS) import AppKit #else import UIKit #endif class GameScene: SKScene { override func didMove(to view: SKView) { let systemImage = "square.and.arrow.up" let width = 400.0 #if os(macOS) let image = NSImage(systemSymbolName: systemImage, accessibilityDescription: nil)!.withSymbolConfiguration(.init(hierarchicalColor: .white))! let scale = NSScreen.main!.backingScaleFactor image.size = CGSize(width: width * scale, height: width / image.size.width * image.size.height * scale) #else let image = UIImage(systemName: systemImage)!.applyingSymbolConfiguration(.init(pointSize: width))!.applyingSymbolConfiguration(.init(hierarchicalColor: .white))! #endif let texture = SKTexture(image: image) print(image.size, texture.size(), image.size.width / image.size.height) let size = CGSize(width: width, height: width / image.size.width * image.size.height) addChild(SKSpriteNode(texture: texture, size: size)) } }
8
0
551
Sep ’24
Running 120Hz with low latency on M1 Max
I am trying to get a little game prototype up and running using Metal using the metal-cpp libraries where I run everything natively at 120Hz with a coupled renderer using Vsync turned on so that I have the absolute physically minimum input to photon latency possible. // Create the metal view SDL_MetalView metal_view = SDL_Metal_CreateView(window); CA::MetalLayer *swap_chain = (CA::MetalLayer *)SDL_Metal_GetLayer(metal_view); // Set up the Metal device MTL::Device *device = MTL::CreateSystemDefaultDevice(); swap_chain->setDevice(device); swap_chain->setPixelFormat(MTL::PixelFormat::PixelFormatBGRA8Unorm); swap_chain->setDisplaySyncEnabled(true); swap_chain->setMaximumDrawableCount(2); I am using SDL3 just for creating the window. Now when I go through my game / render loop - I stall for a long time on getting the next drawable which is understandable - my app runs in about 2-3ms. m_CurrentContext->m_Drawable = m_SwapChain->nextDrawable(); m_CurrentContext->m_CommandBuffer = m_CommandQueue->commandBuffer()->retain(); char frame_label[32]; snprintf(frame_label, sizeof(frame_label), "Frame %d", m_FrameIndex); m_CurrentContext->m_CommandBuffer->setLabel(NS::String::string(frame_label, NS::UTF8StringEncoding)); m_CurrentContext->m_RenderPassDescriptor[ERenderPassTypeNormal] = MTL::RenderPassDescriptor::alloc()->init(); MTL::RenderPassColorAttachmentDescriptor* cd = m_CurrentContext->m_RenderPassDescriptor[ERenderPassTypeNormal]->colorAttachments()->object(0); cd->setTexture(m_CurrentContext->m_Drawable->texture()); cd->setLoadAction(MTL::LoadActionClear); cd->setClearColor(MTL::ClearColor( 0.53f, 0.81f, 0.98f, 1.0f )); cd->setStoreAction(MTL::StoreActionStore); However my ProMotion display does not reliably run at 120Hz when fullscreen and using the direct to display system - it seems to run faster when windowed in composite which is the opposite of what I would expect. The Metal HUD says 120Hz, but the delay to getting the next drawable and looking at what Instruments is saying tells otherwise. When I profile it, the game loop has completed and is sitting there waiting for the next drawable, but the screen does not want to complete in 8.33ms, so the whole thing slows down for no discernible reason. Also as a game developer it is very strange for the command buffer to actually need the drawable texture free to be allowed to encode commands - usually the command buffers and swapping the front and back render buffers are not directly dependent on each other. Usually you only actually need the render buffer texture free when you want to draw to it. I could give myself another drawable, but because I am completing in less than 3ms, all it would do would be to add another frame of latency. I also looked at the FramePacing example and its behaviour is even worse at having high framerate with low latency - the direct to display is always rejected for some reason. Is this just a flaw in the Metal API? Or am I missing something important? I hope someone can help - the behaviour of the display is baffling.
7
0
555
Sep ’24
VisionOS crashes Loading Entities from Disk Bundles with EXC_BREAKPOINT
Summary: I’m working on a VisionOS project where I need to dynamically load a .bundle file containing RealityKit content from the app’s Application Support directory. The .bundle is saved to disk after being downloaded or retrieved as an On-Demand Resource (ODR). Sample project with the issue: Github repo. Play the target test-odr to use with the local bundle and have the crash. Overall problem: Setup: Add a .bundle named RealityKitContent_RealityKitContent.bundle to the app’s resources. This bundle contains a Reality file with two USDA,: “Immersive” and “Scene”. Save to Disk: save the bundle to the Application Support directory, ensuring that the file is correctly copied and saved. Load the Bundle: load the bundle from the saved URL using Bundle(url: bundleURL) to initialize the Bundle object. Load Entity from Bundle: load a specific entity (“Scene”) from the bundle. When trying to load the entity using let storedEntity = try await Entity(named: "Scene", in: bundle), the app crashes with an EXC_BREAKPOINT error. ContentsOf Method Issue: If I use the Entity.load(contentsOf:realityFileURL, withName: entityName) method, it always loads the first root entity found (in this case, “Immersive”) rather than “Scene”, even when specifying the entity name. This is why I want to use the Bundle to load entities by name more precisely. Issue: The crash consistently occurs on the Entity(named: "Scene", in: bundle) line. I have verified that the bundle exists and is accessible at the specified path and that it contains the expected .reality file with multiple entities (“Immersive” and “Scene”). The error code I get is EXC_BREAKPOINT (code=1, subcode=0x1d135d4d0). What I’ve Tried: • Ensured the bundle is properly saved and accessible. • Checked that the bundle is initialized correctly from the URL. • Tested loading the entity using the contentsOf method, which works fine but always loads the “Immersive” entity, ignoring the specified name. Hence, I want to use the Bundle-based approach to load multiple USDA entities selectively. Question: Has anyone faced a similar issue or knows why loading entities using Entity(named:in:) from a disk-based bundle causes this crash? Any advice on how to debug or resolve this, especially for managing multiple root entities in a .reality file, would be greatly appreciated.
1
0
433
Sep ’24
Why is an OpenGL positional (spot) light interfering with non-positional light
I have a legacy OpenGL fixed-pipeline app which has been ported from Windows (32-bit) to MacOS 64-bit. The problem is that if I have a scene with a non-positional light, everything works great. If I add a positional spotlight the two lights interact, and I get incorrect results. This problem does not occur on X86_64 Macs. It does occur when the app is X86_64 running under Rosetta or native ARM64. So it's either an Apple Silicon OpenGL driver behaviour my code is triggering, or something with the on-chip Apple Silicon graphics. Here is the "normal" case: the spotlight is to the right: Here, I have moved the spotlight down (Y = 1). Notice the black areas on the cube. That's incorrect. Now, I turn off the spotlight by commenting out the "makeALight" call for the spotlight (light 6). Now, the cube is evenly lit. Here is the test code I use to generate the lights. You will need to install glfw with brew to build it. main.cpp
0
0
455
Sep ’24
Leaderboard/achievements and testing
Hi, I created a leaderboard in my application, and a method to record a new score: GKLeaderboard.loadLeaderboards(IDs: [leaderboardID]) { (leaderboards, error) in if let error = error { print("Error loading leaderboards: \(error.localizedDescription)") } guard let leaderboard = leaderboards?.first else { print("Leaderboard not found") return } leaderboard.submitScore(score, context: 0, player: self.localPlayer) { error in if let error = error { print("Error reporting score: \(error.localizedDescription)") } else { print("Score reported successfully!") } } } } When debuging, this method is correctly called and I have a success, so I tried to test it with an internal TestFlight release. The leaderboard is never updated. Is there a way to perform a test of a leaderboard before publishing the app? I have the same question for achievements: let achievement = GKAchievement(identifier: identifier) achievement.percentComplete = percentComplete GKAchievement.report([achievement]) { error in if let error = error { print("Error reporting achievement: \(error.localizedDescription)") } } } Thanks!
2
0
457
Sep ’24