c - 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
我在这里做错了什么?
解决方案
引用规范:
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
.
推荐阅读
- python - 从 axios 传输到 django 的文件大小发生变化
- java - 仅显示数组中的唯一项
- bash - join 命令将匹配字段作为新行插入,如何为每个匹配生成单行?
- bash - 在 Bash 中,当它已经被重定向时如何打印到标准输出?
- java - 如何将 groupingBy 放入 Map 并更改键类型
- opcode - z80 的操作码布局有什么模式吗?
- pandas - 每隔一天拆分数据集
- scala - 在函数之外导入 scalaz monad 语法
- c# - 使用 Moq 模拟 IList.Add
- python - 如果首先评估第二个条件通常会导致错误,那么使用“and”是一种好习惯吗