首页 > 解决方案 > glXChooseFBConfig w/ GLX_BIND_TO_TEXTURE_*_EXT 在 Nvidia 驱动程序上不返回 FBConfigs

问题描述

我有一个使用 GLX 扩展的应用程序texture_from_pixmap,它需要根据规范使用带有 GLX_BIND_TO_TEXTURE_RGB_EXT 或 GLX_BIND_TO_TEXTURE_RGBA_EXT 的 FBConfig 创建的颜色缓冲区。

只有使用属性 GLX_BIND_TO_TEXTURE_RGB_EXT 或 GLX_BIND_TO_TEXTURE_RGBA_EXT 设置为 TRUE 的 FBConfig 创建的 GLX 像素图的颜色缓冲区才能绑定为纹理。

https://www.khronos.org/registry/OpenGL/extensions/EXT/GLX_EXT_texture_from_pixmap.txt

我的应用程序可以做到这一点,并且可以与 Mesa 和 Intel i965 驱动程序一起正常工作,但不能与专有的 Nvidia 驱动程序一起工作。

将 glXChooseFBConfig 与 Nvidia 驱动程序一起使用时,没有返回匹配的 FBConfig,我似乎无法弄清楚原因。

我制作了一个重现此问题的最小代码示例。

#include <stdio.h>

#include <X11/Xlib.h>
#include <GL/glx.h>

int main()
{
        Display *display = XOpenDisplay(NULL);

        if (!display) {
                printf("Unable to connect to display.\n");
                return 1;
        }

        int pixmap_config[] = {
                GLX_BIND_TO_TEXTURE_RGB_EXT, True,
                GLX_NONE
        };

        int c = 0;
        GLXFBConfig *configs = glXChooseFBConfig(display, 0, pixmap_config, &c);
        if (!configs) {
                printf("No appropriate GLX FBConfig available!\n");
        } else {
                printf("Number of matching configs: %i\n", c);
        }

        return 0;
}

在我使用专有驱动程序测试的任何 Nvidia 显卡上,我得到:

没有合适的 GLX FBConfig 可用!

将 Intel Graphics 与 Mesa 一起使用,我得到:

匹配配置数:82

我在这里做错了什么?

标签: copenglnvidiaglx

解决方案


引用规范

attrib_list
    Specifies a list of attribute/value pairs. The last attribute must be None.

一些 GL 实现,例如 Mesa,更宽松,并且将接受GLX_NONE(0x8000) 终止此属性列表。但是,Nvidia 驱动程序不会,并且会返回 NULL。指定 Xlib 的None(0) 有效。对于glXCreatePixmap.


推荐阅读