OpenGL GLX_EXT_swap_control存在,但无法链接函数
OpenGL GLX_EXT_swap_control exists but can't link functions
我不能在代码中使用glXSwapBufferEXT,我得到了未声明的标识符。但例如,glXQueryDrawable是有效的。
在我的cmake文件中,我链接Opengl库,并为编译器包含它们。
在我的标题中,我包括GL/glx.h和GL/glxext.h
运行glxinfo表明GLX_EXT_swap_control存在,在我的应用程序中测试扩展也表明它在运行时存在。
我做错了什么?我是不是错过了什么?
我为Quadro K5000 安装了NVIDIA 346.47驱动程序
Linux gcc4.9/crang3.5
您必须使用扩展机制在运行时查询函数指针,尝试直接链接到glX扩展功能不能保证工作。
请注意,我假设您想要glXSwapIntervalEXT
而不是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);
然而,手动执行此操作会添加大量样板代码。您应该考虑使用像GLEW这样的OpenGL加载库,它除了处理GL扩展之外,还处理glX
和wgl
扩展,并在后台为您完成所有这些操作。
相关文章:
- 内联函数中具有内部链接的全局变量
- 使用C链接在函数内部创建C++模板
- 返回一个带有 std::move 的对象并链接函数
- 无法使函数公开。获取:"LNK2005"错误。如何调试链接器错误
- 链接器错误:无法解析构造函数
- C++线程找不到函数作为参数(链接器)
- 使用动态链接加载程序 <dlfcn.h> 而不是直接函数调用的目的是什么?
- 构造函数的链接时间自动注册
- Doxygen:不为非成员函数生成超链接
- 静态库中的 g++ 错误链接函数
- 编写链接函数的更短/更有效的方法,该函数按字典顺序添加新元素
- 仅当链接函数 C++ 时,才会发生"Expression must have class type error"
- 反向动态链接函数调用
- OpenGL GLX_EXT_swap_control存在,但无法链接函数
- C++哈希链接函数
- c++中对链接函数的未定义引用
- 在运行时用LD_PRELOAD链接函数
- C++标准是否规定C链接函数为“noexcept”
- 可以用不同的名称链接函数
- 共享库没有链接函数