带有GLX_BIND_TO_TEXTURE _ * _ EXT的glXChooseFBConfig在Nvidia驱动程序上不返回FBConfig

时间:2019-01-16 00:18:25

标签: c opengl nvidia glx

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

  

仅使用通过FBConfig创建的GLX像素图的颜色缓冲区   属性GLX_BIND_TO_TEXTURE_RGB_EXT或GLX_BIND_TO_TEXTURE_RGBA_EXT   设置为TRUE可以绑定为纹理。

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

我的应用程序可以执行此操作,并且可以与Mesa和Intel i965驱动程序正常工作,但不能与专有的Nvidia驱动程序一起工作。

在通过Nvidia驱动程序使用glXChooseFBConfig时,没有返回匹配的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

我在这里做什么错了?

2 个答案:

答案 0 :(得分:0)

我认为问题出在传递给glXChooseFBConfig的属性列表(您的pixmap_config [])上。

我想某些驱动程序可能会用默认值填充必填字段,然后将其内部配置与请求的内部配置进行比较。

问题在于EXT_texture_from_pixmap仅适用于像素图,不适用于Windows。
因此,您应该在GLX_DRAWABLE_TYPE字段中设置一个包含GLX_PIXMAP_BIT而不是默认GLX_WINDOW_BIT的掩码。

答案 1 :(得分:0)

引用spec

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也是这种情况。