I need to clear the depth buffer, for which i use glClear(GL_DEPTH_BUFFER_BIT)
in OpenGL, how to do in metal ? I have gone through apple's documentation, there is no hint about it.
The short answer is that to clear the depth buffer you add these two lines before beginning a render pass:
mRenderPassDescriptor.depthAttachment.loadAction = MTLLoadActionClear;
mRenderPassDescriptor.depthAttachment.clearDepth = 1.0f;
And you cannot do a clear without ending and restarting a render pass.
Long answer:
In Metal, you have to define that you want the colour and depth buffers cleared when you start rendering to a MTLTexture
. There is no clear function like in OpenGL.
To do this, in your MTLRenderPassDescriptor
, set depthAttachment.loadAction
to MTLLoadActionClear
and depthAttachment.clearDepth
to 1.0f
.
You may also want to set colorAttachments[0].loadAction
to MTLLoadActionClear
to clear the colour buffer.
This render pass descriptor is then passed in to your call to MTLCommandBuffer::renderCommandEncoderWithDescriptor
.
If you do want to clear a depth or colour buffer midway through rendering you have to call endEncoding
on MTLRenderCommandEncoder
, and then start encoding again with depthAttachment.loadAction
set to MTLLoadActionClear
.