簡體   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