我尝试在 Linux (Ubuntu 12.04 x86_64) 上使用 nvidia blob 驱动程序选择此配置:
int doubleBufferAttributes[] = {
GLX_DRAWABLE_TYPE, GLX_PBUFFER_BIT,
GLX_RENDER_TYPE, GLX_RGBA_BIT,
GLX_DOUBLEBUFFER, True,
GLX_RED_SIZE, 8,
GLX_GREEN_SIZE, 8,
GLX_BLUE_SIZE, 8,
GLX_PBUFFER_WIDTH, <width>,
GLX_PBUFFER_HEIGHT, <height>,
GLX_DEPTH_SIZE, 24,
GLX_ALPHA_SIZE, 8,
None
};
glXChooseFBConfig(dpy, DefaultScreen(dpy), doubleBufferAttributes, &numReturned);
它返回 NULL。但是我可以在 glxinfo 中看到支持这种配置。实际上我自己使用 glXGetFBConfigs,我可以看到匹配的 fbconfig。一件奇怪的事情是,如果我对枚举的匹配配置执行 glXGetVisualFromFBConfig,然后执行 glXGetConfig(dpy, vis, GLX_ALPHA_SIZE, &v);然后我得到 0 值,即使我刚刚验证 FBConfig 适用于 ALPHA=8。
为什么会发生这种情况?
附言我尝试调试的真正问题是我看不到使用 nvidia blob 驱动程序渲染的对象,而它们是使用 nouveau 驱动程序渲染的。如果我使用默认值(没有特定设置)执行 glXChooseFBConfig,我可以用 nouveau 重现它,所以我尝试使用配置。我尝试使用枚举的“有效”配置(在 glXCreatePbuffer 中)但仍然没有渲染。
最佳答案
[除了逆向工程,要回答为什么二进制 blob 会做某事是一种猜测练习。然而,下面是一个真正可能的猜测。]
根据spec 、GLX_PBUFFER_WIDTH
和 GLX_PBUFFER_HEIGHT
不是用于选择的有效属性。尝试删除它们。
关于linux - glXChooseFBConfig 无法选择支持的配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20074874/