James W. Walker
10-19-2009, 11:40 AM
My FBO code has been working on many configurations, but fails for one Windows customer with an ATI Radeon Mobility X1800. The status check returns GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT. The setup code looks like this:
// Create and bind a framebuffer object
glGenFramebuffersEXT( 1, &frameBufferID );
glBindFramebufferEXT( GL_FRAMEBUFFER_EXT, frameBufferID );
// Create color renderbuffer
glGenRenderbuffersEXT( 1, &colorRenderBufferID );
glBindRenderbufferEXT( GL_RENDERBUFFER_EXT,
colorRenderBufferID );
glRenderbufferStorageEXT( GL_RENDERBUFFER_EXT, GL_RGB,
inPaneWidth, inPaneHeight );
glFramebufferRenderbufferEXT( GL_FRAMEBUFFER_EXT,
GL_COLOR_ATTACHMENT0_EXT, GL_RENDERBUFFER_EXT,
colorRenderBufferID );
// Create a depth/stencil buffer
glGenRenderbuffersEXT( 1, &depthRenderBufferID );
glBindRenderbufferEXT( GL_RENDERBUFFER_EXT,
depthRenderBufferID );
glRenderbufferStorageEXT( GL_RENDERBUFFER_EXT,
GL_DEPTH24_STENCIL8_EXT, inPaneWidth, inPaneHeight );
glFramebufferRenderbufferEXT( GL_FRAMEBUFFER_EXT,
GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT,
depthRenderBufferID );
glFramebufferRenderbufferEXT( GL_FRAMEBUFFER_EXT,
GL_STENCIL_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT,
depthRenderBufferID );
GLenum result = glCheckFramebufferStatusEXT( GL_FRAMEBUFFER_EXT );
I tried checking glGetError after each step, and it's not detecting any error.
The error GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT seems to suggest that neither the color buffer nor the depth/stencil buffer is getting set up correctly, but why? In another thread, someone said "Sometimes, I noticed glCheckFramebufferStatusEXT() reports incorrect(not relevant) FBO status on ATI cards when it failed to complete a FBO." So maybe GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT is bogus.
// Create and bind a framebuffer object
glGenFramebuffersEXT( 1, &frameBufferID );
glBindFramebufferEXT( GL_FRAMEBUFFER_EXT, frameBufferID );
// Create color renderbuffer
glGenRenderbuffersEXT( 1, &colorRenderBufferID );
glBindRenderbufferEXT( GL_RENDERBUFFER_EXT,
colorRenderBufferID );
glRenderbufferStorageEXT( GL_RENDERBUFFER_EXT, GL_RGB,
inPaneWidth, inPaneHeight );
glFramebufferRenderbufferEXT( GL_FRAMEBUFFER_EXT,
GL_COLOR_ATTACHMENT0_EXT, GL_RENDERBUFFER_EXT,
colorRenderBufferID );
// Create a depth/stencil buffer
glGenRenderbuffersEXT( 1, &depthRenderBufferID );
glBindRenderbufferEXT( GL_RENDERBUFFER_EXT,
depthRenderBufferID );
glRenderbufferStorageEXT( GL_RENDERBUFFER_EXT,
GL_DEPTH24_STENCIL8_EXT, inPaneWidth, inPaneHeight );
glFramebufferRenderbufferEXT( GL_FRAMEBUFFER_EXT,
GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT,
depthRenderBufferID );
glFramebufferRenderbufferEXT( GL_FRAMEBUFFER_EXT,
GL_STENCIL_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT,
depthRenderBufferID );
GLenum result = glCheckFramebufferStatusEXT( GL_FRAMEBUFFER_EXT );
I tried checking glGetError after each step, and it's not detecting any error.
The error GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT seems to suggest that neither the color buffer nor the depth/stencil buffer is getting set up correctly, but why? In another thread, someone said "Sometimes, I noticed glCheckFramebufferStatusEXT() reports incorrect(not relevant) FBO status on ATI cards when it failed to complete a FBO." So maybe GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT is bogus.