derodo
06-29-2006, 03:57 AM
Hi there,
This time I'm playing with the framebuffer object extension, trying to render to an off-screen floating point buffer...everything seems to be working fine with my nVidia card (GF7800), but if I run the same application on my ATI-based PC (9700Pro), then the framerate drops drastically to less than 1 frame per second.
After a bit of trial and error I found quite some interesting facts:
1) The best internal format to be used for floating point targets is GL_RGB_FLOATxx_ATI (16 or 32 bits), as the "standard" GL_RGBxxF_ARB is not supported by ATI until the X800 series and above...so it is no so standard :p
2) My GeF7800 does not support 32bits floating point framebuffers if the render target is a texture; it only works if its a render buffer (glCheckFrameBufferStatus fails)
3) My GeF7800 does not support 16 bit depth buffers (glCheckFrameBufferStatus fails)
4) The ATI problem dissapears if I use a plain 8bit color RGB framebuffer.
Besides that, I've traced my application and found that the problem is caused only if I perform a glClear(GL_DEPTH_BUFFER_BIT) once the floating point buffer is bound and fully working (the glCheckFrameBufferStatusEXT says so at least).
If I do not clear the depth buffer, the applications runs smoothly on both ATI and nVidia, but if just uncommet that damn line, then I start getting 1FPS or less on ATI...oh! and listen to this: the more bits the depth buffer has, the worse it runs...I mean, if i attach a 16bits depth buffer, then it runs at, lets say 1FPS, but if I attach a 24bit one, then it runs at 0.5FPS...
With the nVidia configuration, it always works (as long as I use 16bit FP color render targets and 24bit depth targets).
Anyone knows what the hell is going on? I'm kinda lost now. Could it be a problem with the ATI drivers? I have googled the problem, but didnt find anything about this...
I'd appreciate some comments on this.
Thanks in advance,
This time I'm playing with the framebuffer object extension, trying to render to an off-screen floating point buffer...everything seems to be working fine with my nVidia card (GF7800), but if I run the same application on my ATI-based PC (9700Pro), then the framerate drops drastically to less than 1 frame per second.
After a bit of trial and error I found quite some interesting facts:
1) The best internal format to be used for floating point targets is GL_RGB_FLOATxx_ATI (16 or 32 bits), as the "standard" GL_RGBxxF_ARB is not supported by ATI until the X800 series and above...so it is no so standard :p
2) My GeF7800 does not support 32bits floating point framebuffers if the render target is a texture; it only works if its a render buffer (glCheckFrameBufferStatus fails)
3) My GeF7800 does not support 16 bit depth buffers (glCheckFrameBufferStatus fails)
4) The ATI problem dissapears if I use a plain 8bit color RGB framebuffer.
Besides that, I've traced my application and found that the problem is caused only if I perform a glClear(GL_DEPTH_BUFFER_BIT) once the floating point buffer is bound and fully working (the glCheckFrameBufferStatusEXT says so at least).
If I do not clear the depth buffer, the applications runs smoothly on both ATI and nVidia, but if just uncommet that damn line, then I start getting 1FPS or less on ATI...oh! and listen to this: the more bits the depth buffer has, the worse it runs...I mean, if i attach a 16bits depth buffer, then it runs at, lets say 1FPS, but if I attach a 24bit one, then it runs at 0.5FPS...
With the nVidia configuration, it always works (as long as I use 16bit FP color render targets and 24bit depth targets).
Anyone knows what the hell is going on? I'm kinda lost now. Could it be a problem with the ATI drivers? I have googled the problem, but didnt find anything about this...
I'd appreciate some comments on this.
Thanks in advance,