2016-05-30 60 views
0

對於某些後期渲染效果,我需要讀取深度紋理。只要關閉多重採樣,這可以正常工作。但是對於多采樣,我無法讀取紋理。金屬//讀取多重採樣深度紋理

嘗試通過depth2d_ms參數在着色器中使用多重採樣紋理時,編譯器將在運行時失敗並顯示錯誤消息「內部編譯器錯誤」。

我發現在OpenGL中,你首先將多采樣深度緩衝區blit到已解析的深度緩衝區以讀取採樣值,但是使用Metal時,我得到斷言錯誤,指出blit紋理的採樣計數需要匹配,所以在那裏是沒有機會將4個樣本分成1個。

那麼,如何在使用多采樣的同時從深度緩衝區中讀取採樣或非採樣值?

回答

2

我不知道答案。不過,建議嘗試以下解決方案:

設置MTLRenderPassDepthAttachmentDescriptor的,如下storeAction:

depthAttachment.storeAction = MTLStoreActionMultisampleResolve; 

,並設置其resolveTexture到另一個紋理:

depthAttachment.resolveTexture = targetResolvedDepthTexture. 

最後,嘗試讀取targetResolvedDepthTexture內容。

+0

謝謝你的提示。這當然與讀取已解析的顏色紋理的過程相同。 – Enie

0
+0

功能表指出,OS X系列不支持解析深度紋​​理,但它似乎工作。意思是我沒有得到任何錯誤,但我不能說結果是否100%準確。而且,對於舊GPU家族的設備,這是否意味着我必須放棄多重採樣或不使用深度緩衝區相關着色器? – Enie