Basically, before drawing X-Rays, we now bind a second depth buffer. After drawing XRays, we do an extra resolve pass where we overwrite the non-XRay depth buffer in pixels where the depth is not maximum (which means background pixel, since depth is cleared before drawing X-Ray objects). This ensures both scene and X-Rays keep their depth values and are ready for compositing. Well, the odd effect due to depth discontinuities can be expected, and X-Rays are a bit more expensive (extra buffer + resolve pass) but at least X-Rays won't invalidate depth values anymore. Whee!
		
			
				
	
	
		
			15 lines
		
	
	
		
			227 B
		
	
	
	
		
			GLSL
		
	
	
	
	
	
			
		
		
	
	
			15 lines
		
	
	
		
			227 B
		
	
	
	
		
			GLSL
		
	
	
	
	
	
| uniform sampler2D depthbuffer;
 | |
| varying vec4 uvcoordsvar;
 | |
| 
 | |
| void main(void)
 | |
| {
 | |
| 	float depth = texture2D(depthbuffer, uvcoordsvar.xy).r;
 | |
| 
 | |
| 	/* XRay background, discard */
 | |
| 	if (depth >= 1.0) {
 | |
| 		discard;
 | |
| 	}
 | |
| 
 | |
| 	gl_FragDepth = depth;
 | |
| }
 |