2012-04-13 53 views
2

我有GLX_EXT_texture_from_pixmap的问题。根据EXT_texture_from_pixmap specification和一个例子,我可以使用GLXPixmap作为OpenGL纹理。 然而,在连接阶段,我得到:如何在C中使用GLX_EXT_texture_from_pixmap将X11 Pixmap用作OpenGL纹理?

$ 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' 

我已经检查:

  • GL/glx.h定义glXBindTexImageEXT ...:

    $ grep -l glXBindTexImageEXT /usr/include/GL/* 
    /usr/include/GL/glxext.h 
    /usr/include/GL/glx.h 
    
  • ...这是Fedora 16上的mesa-libGL-devel包的一部分:

    $ rpm -qf /usr/include/GL/glx.h 
    mesa-libGL-devel-7.11.2-3.fc16.x86_64 
    
  • ...还含有libGL.so这(我认为)应该包含glXBindTexImageEXT符号:

    $ rpm -ql mesa-libGL-devel-7.11.2-3.fc16.x86_64 | grep '.so$' 
    /usr/lib64/libGL.so 
    
  • ...但它不是:

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

然而Gnome 3在此机器上工作与合成启用

我的机器有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 

所以我的问题是:

  • 是否预期为libGL.so 包含启用glXBindTexImageEXT despiteGLX_EXT_texture_from_pixmap(至少在ScientificLinux 6.2,Fedora 16,Ubuntu 10.04)。

  • 您能否向我解释一下使用X11 Pixmap作为OpenGL纹理的可能方式?

回答

1

这是一个扩展,所以可靠的方式来访问它是通过扩展机制。 glXGetProcAddress和朋友。我建议使用像GLEW这样随时可用的扩展装载器。