我在Linux上有一个使用SDL的简单OpenGL程序,它只是尝试加载和打印OpenGL版本。
cout << "GL_VERSION : " << glGetString(GL_VERSION) << endl;当我运行程序时,它就挂起了,输出如下…它基本上看起来是在“等待”OpenGL库的响应:
GL_VERSION : 它链接到Nvidia Ubuntu OpenGL库(nvidia-current-dev pkg)。我确实在系统上安装了Mesa,但正如你从'lsof‘中看到的,它似乎正在使用Nvidia。
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请注意,我必须安装‘liblu1-mesa- dev’来提供lu.h,因为这不是Nvidia dev pkg的一部分。
不确定如何调试这个,有人能给我指出正确的方向吗?
发布于 2012-09-14 21:41:42
我解决了这个问题。我已经按照以下链接中的代码获得了一个初始工作版本:
http://www.sdltutorials.com/sdl-opengl-tutorial-basics
本文介绍了一些set属性调用:
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很好。
发布于 2012-09-14 03:54:05
不要在SDL_SetVideoMode()调用中将SDL_OPENGL与其他标志混在一起。嗯,你可以使用SDL_FULLSCREEN,但是你不需要SDL_HWSURFACE。
特别是,SDL_GL_DOUBLEBUFFER不是这样使用的。内部执行:
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
SDL_SetVideoMode(640, 480, 32, SDL_OPENGL);发布于 2012-09-14 03:50:22
当您在终端中输入glxgears时会发生什么?如果没有弹出显示齿轮旋转的窗口,则说明您的安装有问题。
如果您确实看到一个齿轮旋转的窗口,那么您没有像Nicol Bolas建议的那样正确地初始化OpenGL上下文。
https://stackoverflow.com/questions/12360301
复制相似问题