FBO UNSUPPORTED EXT with new drivers!

i have an nvidia quadro 2700m and my fbos fail with the new drivers! sucky!

im wondering if anything has changed?

here is my fbo code


// Setup our FBO
	glGenFramebuffersEXT(1, &DeferredRendererfbo);
	glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, DeferredRendererfbo);

	// Create the render buffer for depth	
	glGenRenderbuffersEXT(1, &depthBuffer);
	glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, depthBuffer);
	glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT24, width, height);
	

	// Now setup the first texture to render to
	glGenTextures(1, &this->Pos0);
	glBindTexture(GL_TEXTURE_2D, this->Pos0);
	glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA16F_ARB,  width, height, 0, GL_RGBA, GL_FLOAT, NULL);
	glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
	glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
	glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
	glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
	glGenerateMipmapEXT(GL_TEXTURE_2D);
	
	glBindTexture(GL_TEXTURE_2D, 0);
	// And attach it to the FBO so we can render to it
	glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, this->Pos0, 0);
	CheckBufferStatus();

that is just one of them, but the rest are just duplicates of this. any help would be great.

EDIT: Still no luck, added MipMapping and took out EXT… still get same thing…

I’m having teh same problem! very strange…

Win7 64bit
NVIDIA Geforce 8800GTS
driver version 258.96 (released July 19, 2010)

I downgraded to driver version 197.45 from April 13, 2010, and this fixes the problem. You can search all beta and past drivers here: http://www.nvidia.com/Download/Find.aspx?lang=en-us (or click on Beta and Archived Drivers, from the regular driver download page)

Can one of you guys post a short GLUT test program that illustrates the problem? This makes it easier for others to repro and help nail it down (starter template here).

(EDIT) Just whipped one up to try and repro here using JoeSSU’s code. See if this generates an error for you. No error here on NVidia 256.44 (Aug 2, 2010) or 256.53 (Aug 31, 2010) w/ GTX285:


#include <stdio.h>
#include <stdlib.h>
#define GL_GLEXT_PROTOTYPES
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>

void checkGLError( const char hdr[] )
{
  int err = glGetError();
  if( err )
  {
    fprintf(stderr, "ERROR %s: %s
", hdr, gluErrorString(err));
    exit(1);
  }
}

void reshape(GLsizei w, GLsizei h)
{
  glViewport(0, 0, w, h);
  glutPostRedisplay();
}

void keyboard( unsigned char key, int x, int y )
{
  // Key Bindings
  switch( key )
  {
    case 27 : exit(0); break;
  }
}

void display()
{
  glClearColor( 0,0,1,1 );
  glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
  glutSwapBuffers();
  checkGLError( "display() end" );
}

void checkFBOStatus ()
{
  checkGLError( "Before checkStatus" );

  GLenum status = glCheckFramebufferStatusEXT( GL_FRAMEBUFFER_EXT );

  checkGLError( "After checkStatus" );

  const char *err_str = 0;
  char buf[80];

  if ( status != GL_FRAMEBUFFER_COMPLETE_EXT )
  {
    switch ( status )
    {
      case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT:
        err_str = "INCOMPLETE ATTACHMENT";
        break;
      case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT:
        err_str = "INCOMPLETE MISSING ATTACHMENT";
        break;
      case GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT:
        err_str = "INCOMPLETE DIMENSIONS";
        break;
      case GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT:
        err_str = "INCOMPLETE FORMATS";
        break;
      case GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT:
        err_str = "INCOMPLETE DRAW BUFFER";
        break;
      case GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT:
        err_str = "INCOMPLETE READ BUFFER";
        break;
      default:
        sprintf( buf, "0x%x", status );
        err_str = buf ;
        break;
    }

    fprintf( stderr, "checkFramebufferStatus() returned '%s'
", err_str );
    exit(1);
 }
}


void initFBO()
{
  GLuint DeferredRendererfbo;
  GLuint depthBuffer;
  GLuint tex;
  
  const int width  = 640;
  const int height = 480;
  
  //------------------------------------------------------------------------
  // FBO stuff - BEGIN
  //------------------------------------------------------------------------

  glGenFramebuffersEXT(1, &DeferredRendererfbo);
  glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, DeferredRendererfbo);

  // Create the render buffer for depth	
  glGenRenderbuffersEXT(1, &depthBuffer);
  glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, depthBuffer);
  glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT24, width, height);

  // Now setup the first texture to render to
  glGenTextures(1, &tex);
  glBindTexture(GL_TEXTURE_2D, tex);
  glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA16F_ARB,  width, height, 0, GL_RGBA, GL_FLOAT, NULL);
  glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
  glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
  glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
  glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
  glGenerateMipmapEXT(GL_TEXTURE_2D);

  glBindTexture(GL_TEXTURE_2D, 0);
  // And attach it to the FBO so we can render to it
  glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, tex, 0);

  checkFBOStatus();

  //------------------------------------------------------------------------
  // FBO stuff - END
  //------------------------------------------------------------------------

  glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
}


main( int argc, char *argv[] )
{
  glutInit( &argc, argv );
  glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH | GLUT_RGB ); 
  glutCreateWindow( "window title" );
  checkGLError( "Create window" );

  initFBO();

  glutReshapeFunc ( reshape  );
  glutDisplayFunc ( display  );
  glutKeyboardFunc( keyboard );

  glutPostRedisplay();
  glutMainLoop();
}

So, I have been busy and unable to get a glut app up, but your code is literally identical to what im doing (line for line) but i am attaching 2 more render targets… my first… is complete after attachment, the second is not. The weird thing is it was working earlier today!!! i am very saddened by this as i feel like there is something seriously wrong with my configuration (drivers and whatnot).

Actually! I found out what it is… its whenever i try to bind something to COLOR_ATTACHEMENT1 or more!