我需要清除深度缓冲区,为此我在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/