It's important to note that glxinfo -v
only reports the supported values for the default OpenGL framebuffer, the one that represents the visible screen itself. It's common for other configurations (ones not reported by glxinfo
) to be supported in offscreen framebuffer objects (FBOs).
As you've noticed, most video cards do not support a 32-bit depth buffer for the default framebuffer, but any recent card can be expected to support them as attachments to an FBO.
So if you want a better depth buffer, you want to create a separate FBO, and attach a 32-bit depth buffer to it, and then render into it, instead of directly to the screen. Once you've finished rendering, blit the final rendered image back to the screen.
Note that NVidia cards historically have not supported 32-bit fixed-point (ie: integer) z-buffers even in FBOs, but do support 32-bit floating point z-buffers there (and have been like this for about a decade). So if you want 32-bit z-buffers, specify their depth attachment as using GL_DEPTH_COMPONENT32F
, not as GL_DEPTH_COMPONENT32
.
EDIT:
Testing on an NVidia GeForce GTX 980, using the official NVidia drivers version 352.63, when creating an FBO the driver will not give me a 32-bit fixed point depth buffer. If I ask for one, it instead gives me a 24-bit fixed point depth buffer, exactly as other NVidia cards have done for many years.
If I ask for a 32-bit floating point depth buffer, then I do receive one, which also matches the normal behaviour of older NVidia cards.