Finally I got working depth buffering using FBO. This is with new FW 76.43. I didn’t try with older 75 drivers. Here is a complete setup code:
Init code:
// create FBO
glGenFramebuffersEXT(1, &fb);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fb);
// create color texture & attach to FBO
glGenTextures(1, &color_tex);
glBindTexture(GL_TEXTURE_2D, color_tex);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, TEXX, TEXY, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
glGenerateMipmapEXT(GL_TEXTURE_2D);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, color_tex, 0);
// initialize depth renderbuffer
glGenRenderbuffersEXT(1, &depth_rb);
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, depth_rb);
glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT24, TEXX, TEXY);
glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, depth_rb);
// create depth texture & attach to FBO
glGenTextures(1, &depth_tex);
glBindTexture(GL_TEXTURE_2D, depth_tex);
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, TEXX, TEXY, 0, GL_DEPTH_COMPONENT, GL_FLOAT, NULL);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_TEXTURE_2D, depth_tex, 0);
This is GLSL shader code:
uniform sampler2DShadow depthTex;
void main(void)
{
gl_FragColor = texture2D(depthTex, gl_TexCoord[0]);
}
And this is render code:
glBindTexture(GL_TEXTURE_2D, depth_tex);
glEnable(GL_TEXTURE_2D);
sh->Program.Bind(); // use GLSL shader
sh->Program.sendUniform("depthTex", 0);
glColor3f(1,1,1);
glBegin(GL_QUADS); // draw quad
{
glTexCoord2f(0,0); glVertex3f(-5, -5, 0);
glTexCoord2f(1,0); glVertex3f( 5, -5, 0);
glTexCoord2f(1,1); glVertex3f( 5, 5, 0);
glTexCoord2f(0,1); glVertex3f(-5, 5, 0);
}
glEnd();
glDisable(GL_TEXTURE_2D);
sh->Program.Unbind(); // "unuse" shader
yooyo


. Anyone interested?