0

I have two systems with seemingly same OpenGL version and extensions support but Framebuffers don't seem to be working on one of them.

A system with the Intel HD 4000 Graphics Card.(FRAMEBUFFER WORKS HERE) Here is the output of glxinfo | grep OpenGL:

OpenGL vendor string: Intel Open Source Technology Center
OpenGL renderer string: Mesa DRI Intel(R) Ivybridge Mobile 
OpenGL core profile version string: 3.3 (Core Profile) Mesa 10.1.0
OpenGL core profile shading language version string: 3.30
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile
OpenGL core profile extensions:
OpenGL version string: 3.0 Mesa 10.1.0
OpenGL shading language version string: 1.30

This is the output of glxinfo | grep framebuffer:

GLX_ARB_framebuffer_sRGB, GLX_ARB_multisample, 
GLX_EXT_create_context_es2_profile, GLX_EXT_framebuffer_sRGB, 
GLX_ARB_framebuffer_sRGB, GLX_ARB_get_proc_address, GLX_ARB_multisample, 
GLX_EXT_framebuffer_sRGB, GLX_EXT_import_context, 
GLX_ARB_framebuffer_sRGB, GLX_ARB_get_proc_address, GLX_ARB_multisample, 
GLX_EXT_create_context_es2_profile, GLX_EXT_framebuffer_sRGB, 
GL_ARB_fragment_shader, **GL_ARB_framebuffer_object**, 
GL_ARB_framebuffer_sRGB, GL_ARB_get_program_binary, 
GL_EXT_draw_instanced, GL_EXT_framebuffer_blit, 
GL_EXT_framebuffer_multisample, GL_EXT_framebuffer_multisample_blit_scaled, 
GL_EXT_framebuffer_sRGB, GL_EXT_packed_depth_stencil, GL_EXT_packed_float, 
GL_ARB_fragment_shader, GL_ARB_framebuffer_object, 
GL_ARB_framebuffer_sRGB, GL_ARB_get_program_binary, 
GL_EXT_framebuffer_blit, GL_EXT_framebuffer_multisample, 
GL_EXT_framebuffer_multisample_blit_scaled, GL_EXT_framebuffer_object, 
GL_EXT_framebuffer_sRGB, GL_EXT_gpu_program_parameters,

Here is another system where Framebuffer is NOT being generated.

Output of glxinfo | grep OpenGL:

OpenGL vendor string: Intel Open Source Technology Center
OpenGL renderer string: Mesa DRI Intel(R) Ivybridge Mobile 
OpenGL core profile version string: 3.3 (Core Profile) Mesa 10.3.0-devel (git-ecee4c4 saucy-oibaf-ppa)
OpenGL core profile shading language version string: 3.30
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile
OpenGL core profile extensions:
OpenGL version string: 3.0 Mesa 10.3.0-devel (git-ecee4c4 saucy-oibaf-ppa)
OpenGL shading language version string: 1.30

Output of glxinfo | grep framebuffer:

GLX_ARB_framebuffer_sRGB, GLX_ARB_get_proc_address, GLX_ARB_multisample, 
GLX_EXT_fbconfig_packed_float, GLX_EXT_framebuffer_sRGB, 
**GL_ARB_framebuffer_object**, GL_ARB_framebuffer_sRGB, 
GL_EXT_draw_instanced, GL_EXT_framebuffer_blit, 
GL_EXT_framebuffer_multisample, GL_EXT_framebuffer_multisample_blit_scaled, 
GL_EXT_framebuffer_sRGB, GL_EXT_packed_depth_stencil, GL_EXT_packed_float, 
GL_ARB_fragment_shader, GL_ARB_framebuffer_object, 
GL_ARB_framebuffer_sRGB, GL_ARB_get_program_binary, 
GL_EXT_framebuffer_blit, GL_EXT_framebuffer_multisample, 
GL_EXT_framebuffer_multisample_blit_scaled, GL_EXT_framebuffer_object, 
GL_EXT_framebuffer_sRGB, GL_EXT_gpu_program_parameters, 

The GL_ARB_framebuffer_object is the extension which enables Framebuffer support with OpenGL. Both systems have them but still one does not work.

I was using Python (PyOpenGL) and used the following function to check what all functions exist using print dir(OpenGL.GL) and saving the output to a file. I was surprised to find that despite the existence of the Framebuffer extension, the function glGenFramebuffers was missing.

What could be the issue here?

psiyumm
  • 6,437
  • 3
  • 29
  • 50
  • See ***Issue (8)*** [here](https://www.opengl.org/registry/specs/ARB/framebuffer_object.txt) *"Unlike most ARB extensions, this is a strict subset of functionality already approved in OpenGL 3.0. This extension exists only to support that functionality on older hardware that cannot implement a full OpenGL 3.0 driver."* `GL_ARB_framebuffer_object` does not do what you think it does, a GL 3.0 implementation already guarantees this functionality and the FBO extension does not change anything. The only reason you would ever check for that extension is if you do not have a 3.0 implementation. – Andon M. Coleman May 28 '14 at 15:10
  • Now, as for your actual question... rather than printing the output of `glxinfo`, is there any chance you could check these things during your GL program's runtime? You could be picking a pixel format that throws you off the GL 3.0 path on one of those pieces of hardware. – Andon M. Coleman May 28 '14 at 15:21
  • @AndonM.Coleman It was just in some other module which is quite strange. – psiyumm May 29 '14 at 09:26

1 Answers1

0

On Python 2.7.5+, the Framebuffer objects are available in a separate module.

The module is: OpenGL.GL.framebufferobjects

Whereas on Python 2.7.6 and above, it is available directly inside: OpenGL.GL.

psiyumm
  • 6,437
  • 3
  • 29
  • 50