somboon
06-16-2010, 03:03 AM
I have this strange problem about reading from depth-stencil texture
I tried to add stencil test to my already working deferred rendering engine.
So I create FBO with the following pack depth-stencil attachment.
glGenTextures(1, &depthBufferTexID);
glBindTexture(GL_TEXTURE_2D, depthBufferTexID);
/*1*/glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH24_STENCIL8, width, height, 0, GL_DEPTH_STENCIL,GL_UNSIGNED_INT_24_8, NULL);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_NEAREST);
/*2*/glFramebufferTexture2D(GL_FRAMEBUFFER,GL_DEPTH_STE NCIL_ATTACHMENT, GL_TEXTURE_2D,depthBufferTexID, 0);
I attached depth-stencil as a texture instead of render buffer
so that I can directly read from depth texture in lighting pass(to reconstruct vertex position ,etc..)
Actually the only thing I change from my whole source code is the line mark with /*1*/ and /*2*/
But after reading from the depth-stencil texture(to reconstruct vertex position in lighting pass),the depth-stencil texture appear to be corrupt.
Any depth-testing enabled rendering perform after the depth-stencil texture reading appered to had some weird hole on them,it is very hard to describe (picture below).
//corrupt picture
http://img21.imageshack.us/img21/8784/corrupts.jpg (http://img21.imageshack.us/i/corrupts.jpg/)
If I comment out the texture reading pass(the deferred lighting pass on background geometry),the subsequence rendering pass appeared correct.
//correct behavior picture
http://img690.imageshack.us/img690/2927/notcorrupt.jpg (http://img690.imageshack.us/i/notcorrupt.jpg/)
I dont think there are anything in the rendering process that can cause this,If I remove the line /*1*/ and /*2*/ and go back to using depth only attachment every thing worked again.
Note that in the whole process I didn't even doing any stencil-related operation once.
Has anyone ever encouter something like this ?
test on ATI HD4670 with 10.5 driver.
Thank in advance.
I tried to add stencil test to my already working deferred rendering engine.
So I create FBO with the following pack depth-stencil attachment.
glGenTextures(1, &depthBufferTexID);
glBindTexture(GL_TEXTURE_2D, depthBufferTexID);
/*1*/glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH24_STENCIL8, width, height, 0, GL_DEPTH_STENCIL,GL_UNSIGNED_INT_24_8, NULL);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_NEAREST);
/*2*/glFramebufferTexture2D(GL_FRAMEBUFFER,GL_DEPTH_STE NCIL_ATTACHMENT, GL_TEXTURE_2D,depthBufferTexID, 0);
I attached depth-stencil as a texture instead of render buffer
so that I can directly read from depth texture in lighting pass(to reconstruct vertex position ,etc..)
Actually the only thing I change from my whole source code is the line mark with /*1*/ and /*2*/
But after reading from the depth-stencil texture(to reconstruct vertex position in lighting pass),the depth-stencil texture appear to be corrupt.
Any depth-testing enabled rendering perform after the depth-stencil texture reading appered to had some weird hole on them,it is very hard to describe (picture below).
//corrupt picture
http://img21.imageshack.us/img21/8784/corrupts.jpg (http://img21.imageshack.us/i/corrupts.jpg/)
If I comment out the texture reading pass(the deferred lighting pass on background geometry),the subsequence rendering pass appeared correct.
//correct behavior picture
http://img690.imageshack.us/img690/2927/notcorrupt.jpg (http://img690.imageshack.us/i/notcorrupt.jpg/)
I dont think there are anything in the rendering process that can cause this,If I remove the line /*1*/ and /*2*/ and go back to using depth only attachment every thing worked again.
Note that in the whole process I didn't even doing any stencil-related operation once.
Has anyone ever encouter something like this ?
test on ATI HD4670 with 10.5 driver.
Thank in advance.