金属//读取多重采样深度纹理

时间:2016-05-30 17:19:07

标签: macos depth-buffer metal compute-shader

对于一些后期渲染效果,我需要读取深度纹理。只要关闭多采样,这种方法就可以正常工作。但是通过多次采样,我无法读取纹理。

尝试在着色器中使用多重采样纹理虽然是deep2d_ms参数,但编译器在运行时会出现错误消息“内部编译器错误”。

我发现使用OpenGL你首先将多样本深度缓冲区blit到一个已解析的深度缓冲区来读取采样值,但是对于Metal我得到一个断言错误,声明blit纹理的样本数需要匹配,所以有没有机会将4个样本分成1个。

那么在使用多次采样时如何从深度缓冲区读取采样或非采样值?

2 个答案:

答案 0 :(得分:2)

我不知道答案。但建议尝试以下解决方案:

设置MTLRenderPassDepthAttachmentDescriptor的storeAction如下:

  depthAttachment.storeAction = MTLStoreActionMultisampleResolve;

并将resolveTexture设置为另一个纹理:

  depthAttachment.resolveTexture = targetResolvedDepthTexture.

最后,尝试阅读targetResolvedDepthTexture内容。

答案 1 :(得分:0)