El objeto OpenGL PyOpenGL Framebuffer no funciona: faltan glGenFramebuffers

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

Esta es la salida de 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 NO siendo generado.

Salida de 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

Salida de 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, 

El GL_ARB_framebuffer_object is the extension which enables Framebuffer apoyo con OpenGL. Both systems have them but still one does not work.

Estaba usando 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 Estaba faltando.

¿Cuál podría ser el problema aquí?

preguntado el 28 de mayo de 14 a las 11:05

Ver Problema (8) aquí "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. -

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. -

@AndonM.Coleman It was just in some other module which is quite strange. -

1 Respuestas

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

El módulo es: OpenGL.GL.framebufferobjects

mientras que en Python 2.7.6 and above, it is available directly inside: OpenGL.GL.

contestado el 29 de mayo de 14 a las 10:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.