gpt4 book ai didi

ios - iPhone X 上 SceneKit + SpriteKit 覆盖的像素格式错误

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:15:39 28 4
gpt4 key购买 nike

在使用 Metal 渲染器的 iPhone X (iOS 11.1.2) 上运行 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() 中添加此代码来重现此内容:

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 Validation(在 Edit Scheme > Options 中)。

不确定有什么缺点,但至少应用不会因此而崩溃。

关于ios - iPhone X 上 SceneKit + SpriteKit 覆盖的像素格式错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47517902/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com