Apply depth buffer from render target to the next render

It’s possible to use the render buffer from a render target in another render call. I have been doing this for using gbuffer as a depth-prepass.
You will have to get the depth buffer from the target, then before the render call attach it to the framebuffer.
To get the depth buffer:

const renderBufferProps = renderer.properties.get(gbuffer)
depthRenderBuffer = renderBufferProps.__webglDepthRenderbuffer || renderBufferProps.__webglDepthbuffer

Then before the renderer.render call and after renderer.setRenderTarget

const _gl = renderer.getContext();
_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.RENDERBUFFER, depthRenderBuffer );

After renderer.render call:

const _gl = renderer.getContext();
_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.RENDERBUFFER, null );

I am not sure about MRT targets though if they have a different private variable. You can check the code for WebGLTextures.js for this.

3 Likes