I want to access the depth buffer value at the currently processed pixel in a pixel shader.
How can we achieve this goal? Basically, there seems to be two options:
On question 1: You can't directly read from the depth buffer in the fragment shader (unless there are recent extensions I'm not familiar with). You need to render to a Frame Buffer Object (FBO). Typical steps:
glGenFramebuffers
and glBindFramebuffer
if you have not used FBOs before.GL_COLOR_ATTACHMENT0
attachment point of your FBO with glFramebufferTexture2D
or glFramebufferRenderbuffer
. If you only care about the depth from this rendering pass, you can skip this and render without a color buffer.GL_DEPTH_ATTACHMENT
attachment point of the FBO.glBindFramebuffer
to switch back to the default framebuffer.On question 2: gl_FragCoord.z
is the depth value of the fragment that your shader is operating on, not the current value of the depth buffer at the fragment position.