glXChooseFBConfig返回NULL [英] glXChooseFBConfig returns NULL

查看:497
本文介绍了glXChooseFBConfig返回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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆