Hiya,
I upgraded my ATI9500 drivers from 6.5 to 6.7 and now I can’t render to cubemap using FBOs…
This is the code i’m using…
FBO creation time:
glGenTextures(1,&rt.texID);
glGenFramebuffersEXT(1,&rt.fbo);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT,rt.fbo);
glBindTexture(GL_TEXTURE_CUBE_MAP_ARB,rt.texID);
//Need to set here a filter indicating we are /are NOT going to use mipmaps. If not, a FRAMEBUFFER_UNSUPPORTED will be returned by glCheckFramebufferStatusEXT because we didn't defined a complete mipmap chain??
glTexParameteri ( GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );
glTexParameteri ( GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );
glTexParameteri ( GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_NEAREST );
glTexParameteri ( GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_NEAREST );
GLenum i;
for ( i=0; i<6; ++i )
{
glTexImage2D ( GL_TEXTURE_CUBE_MAP_POSITIVE_X+i, 0, GL_RGB16, w, h, 0, GL_RGB, GL_UNSIGNED_SHORT, 0 );
glFramebufferTexture2DEXT ( GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_CUBE_MAP_POSITIVE_X+i, rt.texID, 0);
}
glGenRenderbuffersEXT(1,&rt.fboDepth);
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT,rt.fboDepth);
glRenderbufferStorageEXT ( GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT24, w, h );
glFramebufferRenderbufferEXT ( GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT,GL_RENDERBUFFER_EXT, rt.fboDepth );
//Check if all attachments are correct
GLenum status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
if ( status!=GL_FRAMEBUFFER_COMPLETE_EXT )
{
//blah blah
}
FBO render time:
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT,rt.fbo);
glFramebufferRenderbufferEXT ( GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, rt.fboDepth );
GLenum f;
for ( f=0; f<6; ++f )
{
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT,GL_COLOR_ATTACHMENT0_EXT,GL_TEXTURE_CUBE_MAP_POSITIVE_X+f,rt.texID,0);
glClear ( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
.... draw each cubemap face....
}
Do you notice something bad there? Well it works on ATI cat6.5 and NVIDIA. Crashes badly on cat.6.7 causing a big exception (attempt to write at 0x00000000 in ATI DLL driver file ). My PC is a Duron 1000, 1,5Gb RAM, ATI9500 64Mb AGP.
Also a petition for the ARB… Could you include in the FBO spec a render-to-cubemap CLEAR example please?