FBO render-to-texture without depth test.. why?

Started by
2 comments, last by bbliksted 17 years, 10 months ago
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?
Advertisement
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!
--
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
That helped!!! Thanks a million...

This topic is closed to new replies.

Advertisement