我正在尝试在围绕SDL和openGL构建的程序中禁用Linux上的垂直同步。我正在运行一个旧的集成ATI卡,以镓0.4为驱动程序。
我尝试通过在代码中调用 glXSwapInterval(0)
来禁用 vsync,但是当我这样做时,尽管程序编译正常,但在尝试运行它时出现段错误。
GDB 给了我一个相当无益的消息:
Program received signal SIGSEGV, Segmentation fault.
0x00000000 in ?? ()
有没有人知道可能会发生什么?
glXSwapIntervalEXT 和 glXSwapIntervalSGI 是扩展函数;您通常通过glXGetProcAddress访问扩展的函数地址,尽管某些 libGL.so 可能会直接导出它们。
最简单的解决方案:获取一个OpenGL扩展加载程序库,如GLEW(它在所有主要Linux发行版的软件包存储库中)。将出现的所有#include <GL/gl.h>
替换为 #include <GL/glew.h>
,将#include <GL/glx.h>
替换为 #include <GL/glxew.h>
,将 libGLEW.so 添加到链接库列表中,并在创建和绑定 OpenGL 上下文后立即调用glewInit()
。然后测试扩展是否真的可用!