FBO support

Hi to all,

I apology in advance if this sounds as a very “beginner question”

I am developing a free OpenGL painting application called SpeedyPainter (http://speedypainter.altervista.org/)

I use FBO for rendering to texture, but it seems that many hardware configurations do not support this feature. I think that FBOs are available since 4-5 years (it should have been introduced in OpenGL3.0 specifications), so it should be difficult to find some hardware that does not support that specification nowadays.
But, actually, by reading the feedbacks from my application users, it seems that a lot of configurations fail to run it.

One thing that makes me uncertain, and that may be the cause of all those problems, is that I mix immediate mode and new OpenGL features, like FBOs, and glBlendFuncSeparate.
Can this be the cause of those problems? Is using immediate mode highly discouraged?

My test configuration has the following graphics card
ATI Mobility Radeon HD 5650
whit
GL_VERSION: 3.2.9756 Compatibility Profile/Debug Context
GLSL_VERSION: 1.50
and everything works very well on my hardware…

Can somebody help me understand if I am doing something wrong?
Thank you in advance!
Kind regards,
Andrea

I’ve experienced a lot of somewhat subtle differences in OpenGL implementations before. Firstly, it’d really help to get your hands on some old cards of different makes.

I’ve never had any issues mixing OpenGL versions (not saying it can’t happen), in fact I was surprised to see how well immediate mode and OpenGL 3+ stuff worked side by side.

I think it’s quite likely that the problems you’re having are very minor in the order of GL calls or slight breaches of the specs, but of course all it takes is for one bit to fail and you have a black screen etc. Without a card with these issues to dev on, I can only suggest thoroughly reading the FBO specs.

Some random things with FBOs I’ve come across…
In webgl, attaching new textures to FBOs don’t completely update the FBO properties without unbinding and rebinding, so a writing to a float texture was being clamped 0 to 1.
Many old cards don’t like non power-of-2 textures at all or only in some cases. Another example in webgl, glTexImage2D needs power-of-2 when supplying data but will happily initialize any texture size without.
Writing to a texture you’re reading from will work (albeit with RMW errors) on most cards I’ve used but doesn’t have to acording to the specs. Maybe objects/textures need to be unbound to keep a cleaner OpenGL state more often?

A small shader might be able to replace glBlendFuncSeparate, depending on what you’re doing.

Hope some of this helped :)

hi sleap,
thanks a lot for the detailed reply :)

Thanks you for the useful hint about non power of 2 textures, I think I should set a default canvas size with dimensions that are a power of 2. This way maybe, with this limitation, the application will work also on older hardware.

You are perfectly right about the glBlendFuncSeparate, I modified my shader, and I was able to obtain the same results without that function.

From what I understood till now, it seems like some of the modern integrated hardware on notebooks/tablets like Samsung ATIV Smart PC Pro and also Microsoft Surface Pro, do not actually fully support FBO, can this be true? Hope I am wrong.
The funny thing is that I am trying to implement the same algorithm (which uses FBOs) on android and testing it on my cheap Sony Xperia U, and on that phone it works! Maybe I am doing something wrong on my Windows version…

Thank you a lot for the help and useful suggestions :)
Kind regards,
Andrea