I sometimes disable depth buffer writing via glDepthMask(GL_FALSE)
during the rendering of a frame. That works perfectly fine on some GPUs (like the Motorola Droid's PowerVR), but on the HTC EVO with the Adreno GPU for example, I end up with the frame buffer being complete garbage (I see traces of the meshes I rendered somewhere, but the entire screen is mostly trashed).
If I force glDepthMask to be true the entire time, everything works fine.
I need glDepthMask to be off during parts of the alpha rendering. What can cause the framebuffer to get destroyed by turning the depth writing off?
The problem was that glDepthMask
needs to be true when calling glClearDepth
. This apparently only applies to Adreno GPUs, not to PowerVR GPUs.
Not sure if this will help, but me wonders if you still need to clear the depth buffer - especially before you disable glDepthMask. I believe that glDepthMask only enables/disable writes, not depth tests. Maybe the GL implementation is still testing against old depth buffer information from a previous render pass and thus only drawing to part of your screen. Then it looks trashed. Some implementations might clear the depth buffer, other might not? Feel to disregard if this suggestion totally misses the mark.
Anyways, hope that helps in some small way.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With