2012-04-13 108 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這樣隨時可用的擴展裝載器。