FBO render-to-texture without depth test.. why?
Hey...
I'm trying to render my view of a scene to a texture using a FBO. However whenever I enable the FBO the depth test is disabled and it doesn't seem to work by enabling it. Can anybody help me?
void CreateTextureWithFBO(void)
{
// creates texture
glGenTextures (1, &texture);
glBindTexture (texture_target, texture);
glTexImage2D (texture_target, 0, GL_RGBA, textureWidth, textureHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
glTexParameteri(texture_target, GL_TEXTURE_MIN_FILTER,GL_NEAREST);
glTexParameteri(texture_target, GL_TEXTURE_MAG_FILTER,GL_NEAREST);
glTexParameteri(texture_target, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameteri(texture_target, GL_TEXTURE_WRAP_T, GL_CLAMP);
// create fbo and attach texture
glGenFramebuffersEXT (1, &textureFBO);
glBindFramebufferEXT (GL_FRAMEBUFFER_EXT, textureFBO);
glFramebufferTexture2DEXT (GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, texture_target, texture, 0);
glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_RENDERBUFFER_EXT, texture);
// Enable depth test... (not sure if this has any effect here)
glDepthFunc(GL_LESS);
glEnable(GL_DEPTH_TEST);
glBindFramebufferEXT (GL_FRAMEBUFFER_EXT, 0);
}
void RenderTexture(void)
{
glEnable(GL_DEPTH_TEST); // Trying to enable depth test (no effect)
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, textureFBO);
glPushMatrix();
glMatrixMode(GL_MODELVIEW);
glLoadIdentity ();
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glEnable(GL_DEPTH_TEST); // Trying to enable depth test (no effect)
pPaintPistolCamera->updatePerspectiveCamera(paintPistolPosition, paintPistolRotation); // setup camera position
glViewport(0, 0, textureWidth, textureHeight); // Viewport
glEnable(texture_target);
glBindTexture(texture_target, surfaceTexture); // surfaceTexture is an ordinary RGBA texture
glCallList(objectDisplayList); // scene
glBindTexture(texture_target, NULL); // Deselect texture
glDisable(texture_target);
glPopMatrix();
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); // Unbind fbo 0
}
I've tested the code on two graphic cards:
- ATI X600 mobility (driver Omega 3.8.205)
- NVidia 5600FX (forceware 81.98)
and depth test is not enabled on either of the two... Why?
I am quite sure, that you don't attach a depth renderbuffer correctly. See the examples in the FBO spec for sample code to do that.
PS: Use the "code"-tag next time!
PS: Use the "code"-tag next time!
This is a GL specific question and belongs to the GL forum.
Anyway,
you have to attach a depth renderbuffer or texture to your FBO in order to get a depthbuffer for testing.
e.g.:
glFramebufferTexture2DEXT( GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_TEXTURE_2D, texobj_id, 0 );
or:
glFramebufferRenderbufferEXT( GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, rb_obj_id_ );
NOTE:
glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_RENDERBUFFER_EXT, texture);
that wont work as well. check for gl error. you cant use a texture as a renderbuffer.
regards,
stephan
Anyway,
you have to attach a depth renderbuffer or texture to your FBO in order to get a depthbuffer for testing.
e.g.:
glFramebufferTexture2DEXT( GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_TEXTURE_2D, texobj_id, 0 );
or:
glFramebufferRenderbufferEXT( GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, rb_obj_id_ );
NOTE:
glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_RENDERBUFFER_EXT, texture);
that wont work as well. check for gl error. you cant use a texture as a renderbuffer.
regards,
stephan
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement