Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

glDepthMask(GL_FALSE) trashes the frame buffer on some GPUs

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?

like image 285
EboMike Avatar asked Mar 01 '11 23:03

EboMike


2 Answers

The problem was that glDepthMask needs to be true when calling glClearDepth. This apparently only applies to Adreno GPUs, not to PowerVR GPUs.

like image 117
EboMike Avatar answered Oct 18 '22 13:10

EboMike


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.

like image 42
visualjc Avatar answered Oct 18 '22 11:10

visualjc