我在iPhone X (iOS 11.1.2)上使用Metal渲染器运行SceneKit应用程序时遇到了问题。该应用程序具有plist密钥SCNDisableLinearSpaceRendering,设置为YES以获得与iOS 9及更高版本相同的颜色渲染。还通过overlaySKScene添加了SpriteKit 2D叠加层。
在发布版本中,iPhone X显示叠加层中的奇怪颜色,但是3D场景没有问题。调试版本会崩溃,并显示错误日志:“-[MTLDebugRenderCommandEncoder validateFramebufferWithRenderPipelineState:]:1196:失败断言`针对颜色附件0,渲染管道的像素格式(MTLPixelFormatRGBA8Unorm_sRGB)与帧缓冲区的像素格式不匹配(MTLPixelFormatBGR10_XR)。'”
我理解的是2D和3D场景的像素格式不同。我不知道如何更改。有什么建议吗?
此错误仅会在iPhone X上显示,而不会在模拟器或任何其他设备上显示(4s、5s、6 Plus、6s、7、iPad Pro 1G)。当我使用OpenGL ES渲染器时,一切正常。当我关闭SCNDisableLinearSpaceRendering时,Metal渲染器也可以正常工作,但是3D颜色渲染当然会有很大不同。
如果您有iPhone X,则可以通过从游戏模板创建新项目并在viewDidLoad()中添加此代码来重现此问题:
在发布版本中,iPhone X显示叠加层中的奇怪颜色,但是3D场景没有问题。调试版本会崩溃,并显示错误日志:“-[MTLDebugRenderCommandEncoder validateFramebufferWithRenderPipelineState:]:1196:失败断言`针对颜色附件0,渲染管道的像素格式(MTLPixelFormatRGBA8Unorm_sRGB)与帧缓冲区的像素格式不匹配(MTLPixelFormatBGR10_XR)。'”
我理解的是2D和3D场景的像素格式不同。我不知道如何更改。有什么建议吗?
此错误仅会在iPhone X上显示,而不会在模拟器或任何其他设备上显示(4s、5s、6 Plus、6s、7、iPad Pro 1G)。当我使用OpenGL ES渲染器时,一切正常。当我关闭SCNDisableLinearSpaceRendering时,Metal渲染器也可以正常工作,但是3D颜色渲染当然会有很大不同。
如果您有iPhone X,则可以通过从游戏模板创建新项目并在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
如果 iPhone 8/8 Plus 也有类似情况,我也非常感兴趣听到。