Tengo un problema con GLX_EXT_texture_from_pixmap. De acuerdo con la EXT_texture_from_pixmap especificación y un ejemplo presentado allí, puedo usar GLXPixmap como un Textura OpenGL. Sin embargo, en la etapa de vinculación obtengo:

$ gcc -Wall -o uwm main.c -lX11 -lXext -lXcomposite -lXfixes -lGL -lGLU
...
main.c:98:2: warning: implicit declaration of function 'glXBindTexImageEXT' [-Wimplicit-function-declaration]
main.c:(.text+0x651): undefined reference to `glXBindTexImageEXT'

Lo que he comprobado:

  • GL / glx.h define glXBindTexImageEXT ...:

    $ grep -l glXBindTexImageEXT /usr/include/GL/*
    /usr/include/GL/glxext.h
    /usr/include/GL/glx.h
    
  • ... que es parte del paquete mesa-libGL-devel en Fedora 16:

    $ rpm -qf /usr/include/GL/glx.h
    mesa-libGL-devel-7.11.2-3.fc16.x86_64
    
  • ... que contiene también libGL.so que (supongo) debería contener el símbolo glXBindTexImageEXT:

    $ rpm -ql mesa-libGL-devel-7.11.2-3.fc16.x86_64 | grep '.so$'
    /usr/lib64/libGL.so
    
  • ... pero no lo es:

    $ objdump -T /usr/lib64/libGL.so | grep glXBindTexImageEXT
    $ nm /usr/lib64/libGL.so
    nm: /usr/lib64/libGL.so: no symbols
    

Sin embargo, Gnome 3 funciona en esta máquina con la composición habilitada .

Mi máquina tiene la extensión GLX_EXT_texture_from_pixmap:

$ glxinfo | grep GLX_EXT_texture_from_pixmap -B 10
name of display: :0.0
display: :0  screen: 0
direct rendering: Yes
server glx vendor string: SGI
server glx version string: 1.4
server glx extensions:
    GLX_ARB_multisample, GLX_EXT_import_context, GLX_EXT_texture_from_pixmap, 
--
    GLX_SGIX_visual_select_group, GLX_INTEL_swap_event
client glx vendor string: Mesa Project and SGI
client glx version string: 1.4
client glx extensions:
    GLX_ARB_get_proc_address, GLX_ARB_multisample, GLX_EXT_import_context, 
    GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_EXT_framebuffer_sRGB, 
    GLX_MESA_copy_sub_buffer, GLX_MESA_multithread_makecurrent, 
    GLX_MESA_swap_control, GLX_OML_swap_method, GLX_OML_sync_control, 
    GLX_SGI_make_current_read, GLX_SGI_swap_control, GLX_SGI_video_sync, 
    GLX_SGIS_multisample, GLX_SGIX_fbconfig, GLX_SGIX_pbuffer, 
    GLX_SGIX_visual_select_group, GLX_EXT_texture_from_pixmap, 
    GLX_INTEL_swap_event
GLX version: 1.4
GLX extensions:
    GLX_ARB_get_proc_address, GLX_ARB_multisample, GLX_EXT_import_context, 
    GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_MESA_copy_sub_buffer, 
    GLX_MESA_multithread_makecurrent, GLX_MESA_swap_control, 
    GLX_OML_swap_method, GLX_OML_sync_control, GLX_SGI_make_current_read, 
    GLX_SGI_swap_control, GLX_SGI_video_sync, GLX_SGIS_multisample, 
    GLX_SGIX_fbconfig, GLX_SGIX_pbuffer, GLX_SGIX_visual_select_group, 
    GLX_EXT_texture_from_pixmap

Entonces mis preguntas son:

  • ¿Es esperado que libGL.so no contenga glXBindTexImageEXT a pesar de que GLX_EXT_texture_from_pixmap esté habilitado (al menos en ScientificLinux 6.2, Fedora 16, Ubuntu 10.04 que se han verificado)?

  • ¿Podría explicarme cuál es la forma posible de usar X11 Pixmap como textura OpenGL?

3
Bartek Chaber 13 abr. 2012 a las 13:34

1 respuesta

La mejor respuesta

Es una extensión, por lo que la forma confiable de acceder a ella es a través del mecanismo de extensión. glXGetProcAddress y amigos. Sugiero usar un cargador de extensiones listo para usar como GLEW.

2
datenwolf 18 abr. 2012 a las 15:01