glXChooseFBConfig returns NULL



我正在尝试在没有专用显卡的计算机上配置帧缓冲。只有台面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扩展。如今,GLXRender都得到了广泛的支持。但他们可能不会,所以你必须检查。使用glXQueryExtension检查 GLX,XRenderQueryExtension检查Render

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

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

相关内容

  • 没有找到相关文章