I’m using FBOs to render to a chain of N textures (N=12 in my test). I’m getting unexpected (low) performance with a 8800 GTX, 162.22 driver under Vista 32 bits (note: the problem already existed on older driver versions).
It does not matter if I’m rendering anything at all to the FBO, even without a single glClear, performance is horrible.
The interesting thing is that it seems to be independant of the resolution of the texture I’m trying to render to. For 12 textures, I always get around 65-75 fps (vsync disabled of course) whether I render to 64x64 textures or to 1024x1024 textures.
Anti-aliasing is disabled, threaded optimization in Nvidia driver is disabled.
There is no error when checking the framebuffer status (returns GL_FRAMEBUFFER_COMPLETE_EXT).
The same code running on a 7800 GTX under Win XP gives me hundreds of fps.
The texture is created before the FBO, and is using RGBA8 as internal format. No mipmaps, filter is GL_LINEAR/GL_LINEAR.
The FBO code looks like this:
glGenFramebuffersEXT(1, &m_fbo);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_fbo);
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, glTex2D->getGLObject(), 0);
glGenRenderbuffersEXT(1, &(m_depthRB));
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, m_depthRB);
glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT24, m_width, m_height);
glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT,
GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, m_depthRB);
GLenum status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
At render-to-FBO time:
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_fbo);
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, glTex2D->getGLObject(), 0);
glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT,
GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, m_depthRB);
GLenum status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
glViewport(0, 0, m_width, m_height);
Any help or idea is appreciated, thanks.
Y.