繁体   English   中英

iPhone X上使用SceneKit + SpriteKit叠加层的像素格式错误

[英]Pixel Format Error with SceneKit + SpriteKit Overlay on iPhone X

使用Metal渲染器在iPhone X(iOS 11.1.2)上运行时,我对SceneKit应用程序有一个令人讨厌的问题。 应用程序将plist键SCNDisableLinearSpaceRendering设置为YES,以便在iOS 9及更高版本上获得相同的颜色呈现。 它还通过overlaySKScene添加了SpriteKit 2D覆盖。

在发布版本中,iPhone X在叠加层中显示奇怪的颜色,但在3D场景中则不显示。 使用错误日志调试构建崩溃:

- [MTLDebugRenderCommandEncoder validateFramebufferWithRenderPipelineState:]:1196:断言失败`对于颜色附件0,渲染管道的pixelFormat(MTLPixelFormatRGBA8Unorm_sRGB)与帧缓冲的pixelFormat(MTLPixelFormatBGR10_XR)不匹配。

我理解这一点的方式是2D和3D场景的像素格式是不同的。 我不知道我怎么能改变它。 有什么建议?

该错误仅显示在iPhone X上,而不是模拟器或我测试过的任何其他设备(4s,5s,6 Plus,6s,7,iPad Pro 1G)。 当我使用OpenGL ES渲染器时,一切都很好。 当我关闭SCNDisableLinearSpaceRendering时,一切都适用于Metal渲染器,但当然3D渲染非常不同。

如果您有iPhone X,则可以通过从Game模板创建一个新项目并在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上是否也会出现这种情况?

一种有效的解决方法是禁用Metal API验证(在编辑方案>选项中)。

不知道有什么缺点,但至少应用程序不会崩溃。

与此同时,我看到有人报告了iOS 11中的其他几个SceneKit问题。所以我认为这是iOS 11中的一个错误。我在一个月前提交了一个雷达,但问题仍然存在于11.2.5中。

我目前的解决方法是使用OpenGL ES渲染器而不是Metal。

尝试在应用程序的Info.plist文件SCNDisableWideGamut设置为YES。 这个对我有用。 (信用到http://stackoverflow.com/questions/49988314/scnview-present-alternative

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM