Jump to content
  • Advertisement
Sign in to follow this  
bbliksted

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

This topic is 4427 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

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?

Share this post


Link to post
Share on other sites
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!

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!