我无法在我的代码中使用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
答案 0 :(得分:4)
您必须使用扩展机制在运行时查询函数指针,尝试直接链接到glX 扩展功能无法保证正常工作。
请注意,我假设您需要glXSwapIntervalEXT
而不是glXSwapBufferEXT
,因为后者不存在而且前者是GLX_EXT_swap_control
中定义的唯一函数,所以您可能意味着这一点。
如果您想手动执行此操作,则应抓取latest glxext.h
from opengl.org以获取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);
但是,手动执行此操作会添加许多样板代码。您应该考虑使用OpenGL loading library之类的GLEW,除了GL扩展外,它还可以处理glX
和wgl
扩展,并为您完成所有这些工作。