Baz*_*kum -1 c++ opengl nvidia cmake
我无法在代码中使用 glXSwapBufferEXT,我得到未声明的标识符。但例如 glXQueryDrawable 可以工作。
在我的 cmake 文件中,我链接了 Opengl 库,并将它们包含在编译器中。
在我的标题中,我包括 GL/glx.h 和 GL/glxext.h。
运行 glxinfo 显示 GLX_EXT_swap_control 存在,并且在我的应用程序中测试扩展也显示它在运行时存在。
我究竟做错了什么?我错过了什么吗?
我为 Quadro K5000 安装了 NVIDIA 346.47 驱动程序
Linux gcc4.9/clang3.5
您必须使用扩展机制在运行时查询函数指针,尝试直接链接到 glX 扩展函数并不能保证有效。
请注意,我假设您想要glXSwapIntervalEXT而不是 the glXSwapBufferEXT,因为后者不存在,而前者是 中定义的唯一函数GLX_EXT_swap_control,所以您可能是这个意思。
如果您想手动执行此操作,您应该从 opengl.org获取最新的glxext.h指针类型定义PFNGLXSWAPINTERVALEXTPROC,并像这样使用它:
#include "glxext.h"
/* function pointer for glXSwapIntervalEXT */
PFNGLXSWAPINTERVALEXTPROC glXSwapIntervalEXT=NULL;
/* later in your code */
if (/* GLX_EXT_swap_control supported */) {
glXSwapIntervalEXT=(PFNGLXSWAPINTERVALEXTPROC)glXGetProcAddressARB((const GLubyte*)"glXSwapIntervalEXT");
}
/* Later, you can use it as if it were a function.
You'll need a GL context for that */
glXSwapIntervalEXT(1);
Run Code Online (Sandbox Code Playgroud)
然而,手动执行此操作会添加大量样板代码。您应该考虑使用像GLEW这样的OpenGL 加载库,除了 GL 扩展之外,它还可以处理和扩展,并在幕后为您完成所有这些工作。glXwgl