gpt4 book ai didi

opengl - 如何在 C 中使用 GLX_EXT_texture_from_pixmap 将 X11 Pixmap 用作 OpenGL 纹理?

转载 作者:行者123 更新时间:2023-12-02 07:05:29 26 4
gpt4 key购买 nike

我对 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,libGL.so 是否预期包含 glXBindTexImageEXT(至少在已检查的 ScientificLinux 6.2、Fedora 16、Ubuntu 10.04 中) ?

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

最佳答案

它是一个扩展,因此访问它的可靠方法是通过扩展机制。 glXGetProcAddress 和 friend 们。我建议使用现成的扩展加载器,例如 GLEW。

关于opengl - 如何在 C 中使用 GLX_EXT_texture_from_pixmap 将 X11 Pixmap 用作 OpenGL 纹理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10138466/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com