使用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)不匹配。&# 39;
我理解这一点的方式是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上是否也会出现这种情况?
答案 0 :(得分:3)
一个有效的解决方法是禁用Metal API验证(在编辑方案>选项中)。
不确定缺点是什么,但至少应用程序不会因此而崩溃。
答案 1 :(得分:1)
与此同时,我看到人们报告了iOS 11中的其他几个SceneKit问题。所以我认为这是iOS 11中的一个错误。我在一个月前提交了一个雷达,但问题仍然存在于11.2.5。
我目前的解决方法是使用OpenGL ES渲染器而不是Metal。
答案 2 :(得分:1)
尝试在应用程序的Info.plist文件中将docker-machine ssh default
touch /var/acme.json
chmod 600 /var/acme.json
设置为YES。这个对我有用。
(贷记http://stackoverflow.com/questions/49988314/scnview-present-alternative)