1

I want to draw some primitives behind everything that wrote to the depth buffer by using glDepthFunc(GL_EQUAL) and writing to every pixel that has a depth of 1.0 (the highest and default value)

However, for this to work I have to ignore the calculated Z-depth on my primitives, forcing them to test as if it were 1.0 for all of them.

What would be the easiest way to force all fragments in a specific draw to test as having a z-depth of 1.0 regardless of the actual z-depth calculated in the vertex shader?

Rabbid76
  • 202,892
  • 27
  • 131
  • 174
Anne Quinn
  • 12,609
  • 8
  • 54
  • 101

1 Answers1

2

If you want that all fragments have a depth of 1.0, the you've to ensure, that the z component of the normalized device coordinate is 1.0.
The normalized device coordinate is calculated by a perspective divide form the clip coordinate (think about that as gl_Position.xyz / gl_Position.w).

Set gl_Position.z equal gl_Position.w, after the clip coordinate is set, that causes that gl_Position.z / gl_Position.w is 1.0:

gl_Position.z = gl_Position.w; 

But note, the depth of a fragment can also be set in the fragment shader, by assigning a value to gl_FragDepth:
(Of course this prevents that the Early Fragment Test can take place)

gl_FragDepth = 1.0;
Rabbid76
  • 202,892
  • 27
  • 131
  • 174