Regarding GL_EXT_framebuffer_object


I queried for all OpenGL extensions using glGetString(GL_EXTENSIONS). And GL_EXT_framebuffer_object is listed as one of them. Now, isn’t this a part of the core profile after OpenGL 3.0?

The GL version i have is 3.3.0, as reported by glGetString(GL_VERSION). So, why is FBO still reported as an extension?

I have an nVidia 8400 GS.


Because that’s just how they do it. Many implementations will offer up old extension versions of core functionality, so that applications written against the extension won’t break. It also allows you to code for hardware that doesn’t support the core version, even though your hardware does.

Hmm, interesting. Thanks for the reply. So, it could be that some implementation by another hardware vendor may not support the functionality as an extension, wherein the query would fail?(but functionality still exists).

Hello myk45,

you can find a rough overview of which extension became a core feature when here: .

Yes, e.g. a 3.2 core implementation for example might not return the extension string GL_EXT_framebuffer_object but support the functionality as it became core in 3.0 (hint: a well known fruit-named computer brand…).

Hi menzel,

Thanks for the link!

>> (hint: a well known fruit-named computer brand…)
haha :wink:

Note that GL_ARB_framebuffer_object is a core extension of GL3.0, not GL_EXT_framebuffer_object.

Both extensions differ slightly. This is an exert of the “Overview” section of GL_ARB_framebuffer_object, explaining the difference:

“This extension differs from EXT_framebuffer_object by splitting the framebuffer object binding point into separate DRAW and READ bindings (incorporating functionality introduced by EXT_framebuffer_blit). This allows copying directly from one framebuffer to another. In addition, a new high performance blit function is added to facilitate these blits and perform some data conversion where allowed.”

adding to the discussion of EXT vs ARB differences is that the ARB version allows a mixture of texture formats and sizes but the EXT does not.
My understanding is that if you have a GL 3.x context then you definately have ARB like functionality regardless of the GL_EXT extension string being advertised by the implmentation. The only reason for the vendor still showing EXT in the extensions strings is to continue to allow older progs to function correctly as they propably explicitly test for the extension to be present and make use of it when they find it.