OpenGL Linux not reading GL_VERSION



我有一个简单的OpenGL程序,在Linux上使用SDL,它只是尝试加载和打印OpenGL版本。

cout << "GL_VERSION  : " << glGetString(GL_VERSION) << endl;

当我运行程序时,它只是挂起,输出如下。。。它基本上是在"等待"OpenGL库的响应:

GL_VERSION  : 

它与英伟达Ubuntu OpenGL库(nvidiancurrent-dev pkg)相链接。我确实在系统上安装了Mesa,但正如你从"lsof"中看到的,它似乎正在使用英伟达。

sdl-hack 29491 x  mem    REG               8,18 34639056 4212198 /usr/lib/nvidia-current/libnvidia-glcore.so.295.40
sdl-hack 29491 x  mem    REG               8,18    11728 4212207 /usr/lib/nvidia-current/tls/libnvidia-tls.so.295.40
sdl-hack 29491 x  mem    REG               8,18  1054832 4212209 /usr/lib/nvidia-current/libGL.so.295.40

请注意,我必须安装"libglu1-mesa-dev"才能提供glu.h,因为这不是英伟达开发软件包的一部分。

不太确定如何调试这个,有人能给我指明正确的方向吗?

不要在SDL_SetVideoMode()调用中混合使用SDL_OPENGL和其他标志。嗯,你可以使用SDL_FULLSCREEN,但你不需要SDL_HWSURFACE

特别地,SDL_GL_DOUBLEBUFFER不是以这种方式使用的。Intead do:

SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
SDL_SetVideoMode(640, 480, 32, SDL_OPENGL);

在终端中键入glxgear时会发生什么?如果没有弹出显示齿轮旋转的窗口,则说明您的安装有问题。

如果您确实看到一个齿轮旋转的窗口,那么您没有像Nicol Bolas建议的那样正确初始化OpenGL上下文。

我解决了这个问题。我按照下面链接中的代码获得了一个初始工作版本:

http://www.sdltutorials.com/sdl-opengl-tutorial-basics

本文注意到了一些集合属性调用:

SDL_GL_SetAttribute(SDL_GL_RED_SIZE,        8);
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE,      8);
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE,       8);
SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE,      8);
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE,      16);
SDL_GL_SetAttribute(SDL_GL_BUFFER_SIZE,        32);
SDL_GL_SetAttribute(SDL_GL_ACCUM_RED_SIZE,    8);
SDL_GL_SetAttribute(SDL_GL_ACCUM_GREEN_SIZE,    8);
SDL_GL_SetAttribute(SDL_GL_ACCUM_BLUE_SIZE,    8);
SDL_GL_SetAttribute(SDL_GL_ACCUM_ALPHA_SIZE,    8);
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS,  1);
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES,  2);

这些是在SDL_Init之后,但在SDL_SetVideoMode调用之前。删除它们使程序运行良好!

奇怪的是,这个问题只发生在同时具有Mesa和Nvidia GL库的Linux上。Mac OSX很好。

相关内容

  • 没有找到相关文章