// creating an rgb renderbuffer with 32 bit floating point colors
GLuint rgb_rb;
glGenRenderbuffersEXT(1, &rgb_rb);
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, rgb_rb);
glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_RGB32F_ARB, FRAME_WIDTH, FRAME_HEIGHT);
// creating an 24-bit depth renderbuffer
GLuint depth_rb;
glGenRenderbuffersEXT(1, &depth_rb);
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, depth_rb);
glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT24, FRAME_WIDTH, FRAME_HEIGHT);
// creating stencil renderbuffer
GLuint stencil_rb;
glGenRenderbuffersEXT(1, &stencil_rb);
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, stencil_rb);
glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_STENCIL_INDEX, FRAME_WIDTH, FRAME_HEIGHT);
// creating the framebuffer object
glGenFramebuffersEXT(1, &frameBuffer_id);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, frameBuffer_id);
// bind renderbuffers to framebuffer object
glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, depth_rb);
glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_RENDERBUFFER_EXT, rgb_rb);
glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_STENCIL_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, stencil_rb);
// connect a depth texture
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_TEXTURE_2D, frameBufferTexture, 0);
What am I doing wrong? It seems to be no driver bug, I've tried numerous drivers...
FBO Completeness with Stencil Renderbuffer
Hi!
When I'm creating a framebuffer object with a depth attachment (or also called renderbuffer), a color attachment and a depth texture attachment, everything works well.
But if I add a stencil attachment, glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT) returns GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT.
My code is the following:
As I said:
glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT) returns GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT instead of GL_FRAMEBUFFER_COMPLETE_EXT.
glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT) returns GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT instead of GL_FRAMEBUFFER_COMPLETE_EXT.
As far as I know it's not possible to attach a stencil renderbuffer to a framebuffer object due to implementation difficulties. I had this problem a few months ago, and the only information I could find about the problem was that it might be possible to have the stencil attachment interleaved in the depth buffer, but I have no idea if it is possible, or in that case how to implement it. Hope someone else can shed some more light upon this problem...
Quote:Original post by Erim
and the only information I could find about the problem was that it might be possible to have the stencil attachment interleaved in the depth buffer, but I have no idea if it is possible, or in that case how to implement it.
Its coming "soon", there is a depth_stencil extension which extends openGL for a depth stencil pixel format and adds the ability to correctly bind it to the depth and stencil sections of an FBO.
I'd expect NV to have it out pretty soon and ATI to follow in around 2 to 3 months time (thats how far ahead the internal driver development is at ATI, drivers arent released until a package is WHQL stamped)
There is a way around to your problem, because the extension depth+stencil works fine when using a texture. Here some code:
When creating your depth+stencil texture, use GL_DEPTH24_STENCIL8_EXT for internal format, GL_DEPTH_STENCIL_EXT for format and GL_UNSIGNED_INT_24_8_EXT for the type.
Then you attach the texture as depth attachment and stencil attachment.
I may be wrong but I think that several depth attachments are useless since only the last one will be effective (there is no way to access different depth attachments).
[Edit]
May be just using GL_DEPTH24_STENCIL8_EXT instead of GL_DEPTH_COMPONENT24 in glRenderbufferStorageEXT works fine to create a depth+stencil buffer (just give it a try ;) ).
#define GL_DEPTH_STENCIL_EXT 0x84F9#define GL_UNSIGNED_INT_24_8_EXT 0x84FA#define GL_DEPTH24_STENCIL8_EXT 0x88F0#define GL_TEXTURE_STENCIL_SIZE_EXT 0x88F1
When creating your depth+stencil texture, use GL_DEPTH24_STENCIL8_EXT for internal format, GL_DEPTH_STENCIL_EXT for format and GL_UNSIGNED_INT_24_8_EXT for the type.
Then you attach the texture as depth attachment and stencil attachment.
I may be wrong but I think that several depth attachments are useless since only the last one will be effective (there is no way to access different depth attachments).
[Edit]
May be just using GL_DEPTH24_STENCIL8_EXT instead of GL_DEPTH_COMPONENT24 in glRenderbufferStorageEXT works fine to create a depth+stencil buffer (just give it a try ;) ).
Quote:Original post by phantomQuote:Original post by Erim
and the only information I could find about the problem was that it might be possible to have the stencil attachment interleaved in the depth buffer, but I have no idea if it is possible, or in that case how to implement it.
Its coming "soon", there is a depth_stencil extension which extends openGL for a depth stencil pixel format and adds the ability to correctly bind it to the depth and stencil sections of an FBO.
I'd expect NV to have it out pretty soon and ATI to follow in around 2 to 3 months time (thats how far ahead the internal driver development is at ATI, drivers arent released until a package is WHQL stamped)
nVIDIA already has it in the 81.85 official drivers.
This code should work:
A similar code works for me (in my case the color attachment is a texture too). If you still get GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT, I can't think of anything except driver issue.
// creating an rgb renderbuffer with 32 bit floating point colorsGLuint rgb_rb;glGenRenderbuffersEXT(1, &rgb_rb);glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, rgb_rb);glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_RGB32F_ARB, FRAME_WIDTH, FRAME_HEIGHT);// creating an 24-bit depth + 8-bit stencil textureGLenum texTarget = GL_TEXTURE_RECTANGLE_ARB;GLenum texInternalFormat = GL_DEPTH24_STENCIL8_EXT;GLenum texFormat = GL_DEPTH_STENCIL_EXT;GLenum texType = GL_UNSIGNED_INT_24_8_EXT;GLenum texFilterMode = GL_NEAREST;GLuint depth_stencil_texture = 0;glGenTextures(1, &depth_stencil_texture);glBindTexture(texTarget, depth_stencil_texture);glTexImage2D(texTarget, 0, texInternalFormat, FRAME_WIDTH, FRAME_HEIGHT, 0, texFormat, texType, NULL);glTexParameterf(texTarget, GL_TEXTURE_MIN_FILTER, texFilterMode);glTexParameterf(texTarget, GL_TEXTURE_MAG_FILTER, texFilterMode);glTexParameterf(texTarget, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);glTexParameterf(texTarget, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);glTexParameteri(texTarget, GL_TEXTURE_COMPARE_FUNC_ARB, GL_LEQUAL);// creating the framebuffer objectglGenFramebuffersEXT(1, &frameBuffer_id);glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, frameBuffer_id);// bind renderbuffer to framebuffer objectglFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_RENDERBUFFER_EXT, rgb_rb);// connect a depth stencil textureglFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, texTarget , depth_stencil_texture, 0);glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_STENCIL_ATTACHMENT_EXT, texTarget , depth_stencil_texture, 0);
A similar code works for me (in my case the color attachment is a texture too). If you still get GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT, I can't think of anything except driver issue.
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement