2016-05-30 57 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