我需要清除深度缓冲区,为此我在OpenGL中使用glClear(GL_DEPTH_BUFFER_BIT),在 Metal 中该怎么做?我浏览了Apple的文档,没有任何提示。

最佳答案

简短的答案是,要清除深度缓冲区,请在开始渲染过程之前添加以下两行:mRenderPassDescriptor.depthAttachment.loadAction = MTLLoadActionClear;mRenderPassDescriptor.depthAttachment.clearDepth = 1.0f;而且,您无法在不结束并重新启动渲染过程的情况下进行清除。

长答案:

在Metal中,您必须定义在开始渲染到MTLTexture时希望清除颜色和深度缓冲区。没有像OpenGL这样的清除功能。

为此,在MTLRenderPassDescriptor中,将depthAttachment.loadAction设置为MTLLoadActionClear,将depthAttachment.clearDepth设置为1.0f
您可能还需要将colorAttachments[0].loadAction设置为MTLLoadActionClear来清除颜色缓冲区。

然后,此渲染过程描述符被传递到您对MTLCommandBuffer::renderCommandEncoderWithDescriptor的调用中。

如果确实要在渲染过程中清除深度或颜色缓冲区,则必须在endEncoding上调用MTLRenderCommandEncoder,然后在depthAttachment.loadAction设置为MTLLoadActionClear的情况下再次开始编码。

关于ios - iOS Metal : How to clear Depth Buffer ?类似于OpenGL中的glClear(GL_DEPTH_BUFFER_BIT),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29495380/

10-16 14:07