如何禁用深度测试但启用金属中的更新深度纹理(如glDepthMask(GL_TRUE))?

时间:2019-04-04 02:31:57

标签: opengl-es-2.0 metal

在OpenGL中,我们可以通过以下方式禁用深度测试并仅更新深度纹理(深度纹理通过GL_DEPTH_ATTACHMENT绑定到FBO的glFramebufferTexture2D):

glDisable(GL_DEPTH_TEST); 
glDepthMask(GL_TRUE);

glDisable(GL_DEPTH_TEST)表示所有片段都将“始终通过”,因此我将MTLCompareFunctionAlways设置为depthCompareFunction中的MTLDepthStencilDescriptor

glDepthMask(GL_TRUE)意味着深度纹理将使用片段的深度值(无论之前具有的值)进行更新。在“金属”中,我将true的{​​{1}}设置为depthWriteEnabled

不幸的是,最终的渲染结果是错误的。我理解不对吗?如果是,那么如何在Metal中以正确的方式进行设置。

1 个答案:

答案 0 :(得分:0)

即使深度缓冲区存在并且深度掩码不为零,如果禁用深度测试,深度缓冲区也不会更新。为了无条件写入深度缓冲区,应启用深度测试并将其由WITH SERDEPROPERTIES("hbase.columns.mapping" = "personal data:,:key") 设置为GL_ALWAYS