Ich habe ein unangenehmes Problem mit einer SceneKit App, wenn sie auf iPhone X (iOS 11.1.2) mit dem Metall-Renderer ausgeführt wird. Die App hat die plist Schlüssel SCNDisableLinearSpaceRendering
auf YES gesetzt, um die gleiche Farbwiedergabe auf iOS 9 und spätere Versionen zu erhalten. Es hat auch eine SpriteKit 2D-Overlay über overlaySKScene
hinzugefügt.Pixel Format Fehler mit SceneKit + SpriteKit Overlay auf iPhone X
In Version baut, zeigt die iPhone X seltsame Farben im Overlay, aber nicht in der 3D-Szene. Debug baut Crash mit dem Fehlerprotokoll:
- [MTLDebugRenderCommandEncoder validateFramebufferWithRenderPipelineState:]: 1196: failed Behauptung `Für Farb Befestigung 0, macht die Pipeline des Pixelformat (MTLPixelFormatRGBA8Unorm_sRGB) nicht das Pixelformat des Framebuffer passen (MTLPixelFormatBGR10_XR)‚.
So wie ich das verstehe, ist, dass das Pixelformat der 2D- und 3D-Szenen unterschiedlich ist. Ich habe keine Ahnung, wie ich das ändern könnte. Irgendwelche Vorschläge?
Der Fehler wird nur auf dem iPhone X angezeigt, nicht auf dem Simulator oder einem anderen Gerät, das ich getestet habe (4s, 5s, 6 Plus, 6s, 7, iPad Pro 1G). Wenn ich den OpenGL ES Renderer benutze, ist alles in Ordnung. Wenn ich SCNDisableLinearSpaceRendering ausschalten, funktioniert alles mit dem Metall-Renderer auch, aber die 3D-Farbwiedergabe ist sehr unterschiedlich, natürlich.
Wenn Sie ein iPhone X haben, können Sie diese reproduzieren, indem Sie ein neues Projekt aus der Spielvorlage erstellen und das Hinzufügen dieser Code in viewDidLoad():
let overlaySize = CGSize(width: 100, height: 100)
let overlay = SKScene(size: overlaySize)
let sprite = SKSpriteNode(color: UIColor.blue, size: overlaySize)
overlay.addChild(sprite)
scnView.overlaySKScene = overlay
Ich würde auch sehr daran interessiert sein, wenn das zu hören tritt auch auf iPhone 8/8 Plus auf?
hast du https://stackoverflow.com/questions/39522086/scenekit-how-to-reproduce-ios-9-lighting-color-effect-one-directional-one-amb gesehen – Knight0fDragon