glXChooseFBConfig返回NULL [英] glXChooseFBConfig returns NULL
问题描述
我正在尝试在没有专用图形卡的计算机上配置帧缓冲区.只有mesa GL.
I'm trying to configure a framebuffer on a computer which has no dedicated graphics card. Only mesa GL.
我尝试了多种FB配置,但似乎无法获得非NULL的返回值.相同的代码可在装有nvidia驱动程序的另一台计算机上使用..
I've tried multiple FB configurations but I can't seem to get a non-NULL return. The same code works on another computer with nvidia drivers..
OpenGL vendor string: Tungsten Graphics Inc
OpenGL renderer string: Mesa DRI Intel(R) Ivybridge Desktop
OpenGL version string: 3.0 Mesa 8.0.4
OpenGL shading language version string: 1.30
在另一台计算机上运行的台面示例在同一glXFBConfig行上也失败.
The mesa examples that works on another computer also fails at the same glXFBConfig line.
这是代码的相关部分
int fbAttribs[] = {
None
};
int numberOfFramebufferConfigurations = 0;
GLXFBConfig* fbConfigs = glXChooseFBConfig(self->display, DefaultScreen(self->display), fbAttribs, &numberOfFramebufferConfigurations);
正如我所说,我尝试了不同的配置,例如:
As I said, I tried with different configurations such as:
int fbAttribs[NUM_FB_CONFIGS][100] = {
{
/* Single buffered, with depth buffer */
GLX_RENDER_TYPE, GLX_RGBA_BIT,
GLX_DRAWABLE_TYPE, GLX_PBUFFER_BIT,
GLX_RED_SIZE, 1,
GLX_GREEN_SIZE, 1,
GLX_BLUE_SIZE, 1,
GLX_DEPTH_SIZE, 1,
GLX_DOUBLEBUFFER, 0,
GLX_STENCIL_SIZE, 0,
None
},
{
/* Double buffered, with depth buffer */
GLX_RENDER_TYPE, GLX_RGBA_BIT,
GLX_DRAWABLE_TYPE, GLX_PBUFFER_BIT,
GLX_RED_SIZE, 1,
GLX_GREEN_SIZE, 1,
GLX_BLUE_SIZE, 1,
GLX_DEPTH_SIZE, 1,
GLX_DOUBLEBUFFER, 1,
GLX_STENCIL_SIZE, 0,
None
},
{
/* Single buffered, without depth buffer */
GLX_RENDER_TYPE, GLX_RGBA_BIT,
GLX_DRAWABLE_TYPE, GLX_PBUFFER_BIT,
GLX_RED_SIZE, 1,
GLX_GREEN_SIZE, 1,
GLX_BLUE_SIZE, 1,
GLX_DEPTH_SIZE, 0,
GLX_DOUBLEBUFFER, 0,
GLX_STENCIL_SIZE, 0,
None
},
{
/* Double buffered, without depth buffer */
GLX_RENDER_TYPE, GLX_RGBA_BIT,
GLX_DRAWABLE_TYPE, GLX_PBUFFER_BIT,
GLX_RENDER_TYPE, GLX_RGBA_BIT,
GLX_DRAWABLE_TYPE, GLX_PBUFFER_BIT,
GLX_RED_SIZE, 1,
GLX_GREEN_SIZE, 1,
GLX_BLUE_SIZE, 1,
GLX_DEPTH_SIZE, 0,
GLX_DOUBLEBUFFER, 1,
GLX_STENCIL_SIZE, 0,
None
}
};
GLX_RED_SIZE, 1,
GLX_GREEN_SIZE, 1,
GLX_BLUE_SIZE, 1,
GLX_DEPTH_SIZE, 0,
GLX_DOUBLEBUFFER, 1,
GLX_STENCIL_SIZE, 0,
None
}
};
推荐答案
解答我自己的问题.
这实际上是不支持所需扩展的OpenGL上下文. 在这种情况下,我将(-X)插入计算机并运行执行所有OpenGL计算的二进制文件.在这种情况下,取决于$ DISPLAY变量,可以使用主机或客户端的OpenGL.将DISPLAY变量设置为:0.0意味着使用主机的OpenGL,从而解决了问题.
This actually ended up being the OpenGL context not supporting the required extensions. In this case, I was ssh'ing (with -X) into the machine and running the binary that does all the OpenGL computation. In such cases the hosts or the client's OpenGL may be used depending on the $DISPLAY variable. Setting the DISPLAY variable to :0.0 meant use the host's OpenGL, which solved the problems.
这篇关于glXChooseFBConfig返回NULL的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!