我正在尝试在没有专用显卡的计算机上配置帧缓冲。只有台面GL。
我已经尝试了多种FB配置,但我似乎无法获得非NULL 返回。相同的代码适用于另一台带有 nvidia 驱动程序的计算机。
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行上也失败。
这是代码的相关部分
int fbAttribs[] = {
None
};
int numberOfFramebufferConfigurations = 0;
GLXFBConfig* fbConfigs = glXChooseFBConfig(self->display, DefaultScreen(self->display), fbAttribs, &numberOfFramebufferConfigurations);
正如我所说,我尝试了不同的配置,例如:
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
}
};
您是否检查过,GLX
确实可用?同样,要使glXChooseFBConfig工作,服务器必须支持Render
扩展。如今,GLX
和Render
都得到了广泛的支持。但他们可能不会,所以你必须检查。使用glXQueryExtension
检查 GLX,XRenderQueryExtension
检查Render
。
用解决方案回答我自己的问题。
这实际上最终导致OpenGL上下文不支持所需的扩展。在这种情况下,我正在 ssh'ing(使用 -X)进入机器并运行执行所有 OpenGL 计算的二进制文件。在这种情况下,可以根据$DISPLAY变量使用主机或客户端的 OpenGL。将 DISPLAY 变量设置为 :0.0 意味着使用主机的 OpenGL,这解决了问题。