glXChooseFBConfig返回NULL

时间:2013-10-16 00:24:48

标签: opengl glew mesa glx

我正在尝试在没有专用图形卡的计算机上配置帧缓冲区。只有mesa 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

在另一台计算机上运行的mesa示例也在同一个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
      }
   };

2 个答案:

答案 0 :(得分:1)

您是否检查过GLX实际可用?此外,对于glXChooseFBConfig,服务器必须支持Render扩展。目前,GLXRender都受到广泛支持。但他们可能没有,所以你必须检查。使用glXQueryExtension检查GLX,XRenderQueryExtension检查Render

答案 1 :(得分:0)

用解决方案回答我自己的问题。

这实际上最终成为不支持所需扩展的OpenGL上下文。 在这种情况下,我是ssh'ing(使用-X)进入机器并运行执行所有OpenGL计算的二进制文件。在这种情况下,可以使用主机或客户端的OpenGL,具体取决于$ DISPLAY变量。将DISPLAY变量设置为:0.0意味着使用主机的OpenGL,它解决了问题。