9
votes

I want to write to the OpenGL depth buffer only if the current pixel has an alpha > 0.5 how to do that?

If the pixel has alpha < 0.5, i want to render the color but not write it's depth to the depth buffer. The command discard isn't what I'm looking for, since it discards both, color and depth information; I only want to discard depth information.

There is the gl_FragDepth variable that can be set, but to which value? And for the case alpha < 0.5, how to leave gl_FragDepth unchanged?

Do I have to use FBOs for this, or should it also work without? The project I'm working on, is a GLES 2.0 Android project

1
I don't think you can do this in a single pass, at least not directly and not efficiently. You can of course set gl_FragDepth to a value that will cause the depth test to fail (e.g. zfar), but this will also discard the fragment's color. With two passes using different alpha test, this should work... but on ES you probably can't afford another pass just like this.Damon

1 Answers

17
votes

I've solved the problem for me by using

glDepthMask(false)

This command disables writing to to the depth buffer but still performs depth-testing. I've simply rendered my transparent objects after all other objects and got exactly the result I was looking for.