laying down depth

a bit embarrassed to ask ( as i should know it ) but whats the best way to lay down depth info, from a depthtexture.

i could do it with glsl + gl_FragDepth
but is there a way to do it with the fixed function pipeline?

ta zed

glReadPixels ?

If you have the depth info in host memory, you can copy it to the depth buffer via glDrawPixels(GL_DEPTH_COMPONENT). You must enable DEPTH_TEST and depth writes, set the DepthFunc appropriately and you may wish to disable color buffer writes.

If you have the depth info in a depth texture already, you may associate it with a FBO and copy it directly with BlitFramebufferEXT:

http://www.opengl.org/registry/specs/EXT/framebuffer_blit.txt

cheers, framebuffer blit looks ideal unfortunatly i cant do it cause

  1. Should blits be allowed between buffers of different bit sizes?
    Resolved: Yes, for color buffers only. Attempting to blit
    between depth or stencil buffers of different size generates
    INVALID_OPERATION.
    heres what im doing
    i have the main scene as a fullsized FBO (color + depth textures)
  • i have 2 other FBOs, glow buffer + particle system buffer.
    both these are 1/4 sized (to conserve fillrate).
    now to get these to display correctly i need to take into consideration the depth info when i draw into the FBOs.

ok got it working with the following (just in case someone wants to do the same)

glTexParameteri( GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_COMPARE_MODE_ARB, GL_NONE );

g_GL->draw_fullsize_quad_rectangle( g_Program.options.renderbuffer_width, g_Program.options.renderbuffer_height );

/////////////////////
// fragment shader //
/////////////////////
#extension GL_ARB_texture_rectangle : enable

uniform sampler2DRect depthtex;
varying vec2 texcoord;

void main( void )
{
gl_FragDepth = texture2DRect( depthtex, texcoord );
}

another thing since im writing the depth to the whole screen, is it worthwhile turning off the clear( GL_DEPTH ) ?

Yes, make sure your depth test is set to GL_ALWAYS when drawing the depth values, that compare_mode is just the depth shadow comparrison (fragment z vs. texture R), you still need the depth fragments to wuin when tested against the framebuffer and so that clear may be saving you for now.