OpenGL GLX_EXT_swap_control 存在但无法 link 运行
OpenGL GLX_EXT_swap_control exists but can't link functions
我无法在我的代码中使用 glXSwapBufferEXT,我得到了未声明的标识符。但是例如 glXQueryDrawable 有效。
在我的 cmake 文件中,我正在链接 Opengl 库,并将它们包含在编译器中。
在我的 header 中,我包括 GL/glx.h 和 GL/glxext.h.
运行 glxinfo 显示 GLX_EXT_swap_control 存在,并且在我的应用程序中测试扩展也显示它在运行时存在。
我做错了什么?我错过了什么吗?
我为 Quadro K5000 安装了 NVIDIA 346.47 驱动程序
Linux gcc4.9/clang3.5
你必须使用扩展机制在运行时查询函数指针,试图直接link到一个glX
扩展功能不保证有效。
请注意,我假设您需要 glXSwapIntervalEXT
而不是 glXSwapBufferEXT
,因为后者不存在并且前者是 GLX_EXT_swap_control
中定义的唯一函数,所以您的意思可能是那。
如果你想手动执行此操作,你应该获取 PFNGLXSWAPINTERVALEXTPROC
指针类型定义的 latest glxext.h
from opengl.org,并像这样使用它:
#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);
但是,手动执行此操作会添加大量样板代码。您应该考虑使用 OpenGL loading library like GLEW,它除了 GL 扩展之外还处理 glX
和 wgl
扩展,并在后台为您完成所有这些工作。
我无法在我的代码中使用 glXSwapBufferEXT,我得到了未声明的标识符。但是例如 glXQueryDrawable 有效。
在我的 cmake 文件中,我正在链接 Opengl 库,并将它们包含在编译器中。
在我的 header 中,我包括 GL/glx.h 和 GL/glxext.h.
运行 glxinfo 显示 GLX_EXT_swap_control 存在,并且在我的应用程序中测试扩展也显示它在运行时存在。
我做错了什么?我错过了什么吗?
我为 Quadro K5000 安装了 NVIDIA 346.47 驱动程序
Linux gcc4.9/clang3.5
你必须使用扩展机制在运行时查询函数指针,试图直接link到一个glX 扩展功能不保证有效。
请注意,我假设您需要 glXSwapIntervalEXT
而不是 glXSwapBufferEXT
,因为后者不存在并且前者是 GLX_EXT_swap_control
中定义的唯一函数,所以您的意思可能是那。
如果你想手动执行此操作,你应该获取 PFNGLXSWAPINTERVALEXTPROC
指针类型定义的 latest glxext.h
from opengl.org,并像这样使用它:
#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);
但是,手动执行此操作会添加大量样板代码。您应该考虑使用 OpenGL loading library like GLEW,它除了 GL 扩展之外还处理 glX
和 wgl
扩展,并在后台为您完成所有这些工作。