我对GLX_EXT_texture_from_pixmap有问题。根据EXT_texture_from_pixmap specification和此处提供的示例,我可以将GLXPixmap用作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


所以我的问题是:


尽管启用了GLX_EXT_texture_from_pixmap(至少在ScientificLinux 6.2,Fedora 16,Ubuntu 10.04中已经检查过),但libGL.so是否仍不包含glXBindTexImageEXT?
您能否向我解释将X11 Pixmap用作OpenGL纹理的可能方法是什么?

最佳答案

它是一个扩展,因此访问它的可靠方法是通过扩展机制。 glXGetProcAddress和朋友。我建议使用像GLEW这样的现成的扩展加载程序。

10-05 23:03