C++ wglGetProcAddress返回NULL
我尝试使用WGL_ARB_pbuffer进行OpenGL的屏幕外渲染, 但我在初始化过程中失败了。 这是我的代码C++ wglGetProcAddress返回NULL,c++,opengl,wgl,C++,Opengl,Wgl,我尝试使用WGL_ARB_pbuffer进行OpenGL的屏幕外渲染, 但我在初始化过程中失败了。 这是我的代码 wglGetExtensionsStringARB = (PFNWGLGETEXTENSIONSSTRINGARBPROC) wglGetProcAddress("wglGetExtensionsStringARB"); if(!wglGetExtensionsStringARB) return; const GLubyte* extensions = (const GLubyte*
wglGetExtensionsStringARB = (PFNWGLGETEXTENSIONSSTRINGARBPROC) wglGetProcAddress("wglGetExtensionsStringARB");
if(!wglGetExtensionsStringARB) return;
const GLubyte* extensions = (const GLubyte*) wglGetExtensionsStringARB(wglGetCurrentDC());
实际上,这在第二行结束,因为wglGetExtensionsStringARB为NULL。
我不知道wglGetProcAddress为什么不工作。
我包括了“wglext.h”,并且在标题处定义如下
PFNWGLGETEXTENSIONSSTRINGARBPROC pwglGetExtensionsStringARB = 0;
#define wglGetExtensionsStringARB pwglGetExtensionsStringARB
为什么我不能按预期使用wglGetProcAddress???
wglGetProcAddress
需要OpenGL渲染上下文;在调用wglGetProcAddress
之前,您需要调用您的wglCreateContext
和wglMakeCurrent
。如果尚未设置OpenGL上下文,wglGetProcAddress
将始终返回NULL
。如果您不确定是否有OpenGL上下文(例如,如果您使用的是第三方框架/库),请调用wglGetCurrentContext
,并检查以确保它没有返回NULL
您确定驱动程序/卡组合支持该功能吗?ARB
表示并非所有硬件都支持该功能。引用自-“应用程序应调用wglGetProcAddress以查看是否支持wglGetExtensionsStringARB。如果支持,则可以使用它确定设备支持哪些WGL扩展。”这就是为什么我写“如果(!wglGetExtensionsStringARB)返回;”所以它返回了,我仍然不知道为什么wglGetExtensionsStringARB为空。如果我必须检查我的驱动程序,我该怎么做?正如@enhzflep提到的,NULL表示您的驱动程序/GL实现不支持此扩展。如果您的软件实现具有此支持,您可以使用它,或者您需要升级驱动程序/硬件。除非您计划自己实现此扩展,否则您几乎无法检查驱动程序。@phrust-如果wglGetProcAddress
调用返回NULL,则不支持此扩展-这就是检查卡/驱动程序支持的方式。你显然没有(您是否尝试过wglGetExtensionString
,正如这里的回答中所提到的:?其他(非wgl和wgl扩展)工作吗?您是否有当前的gl上下文?OHHH所以这就是为什么glewInit在glutCreateWindow之后被调用。仍然没有解释为什么glLoadMatrixf/GlGetFloav(gl\u MODELVIEW\u MATRIX,Out)也需要它(如果未设置上下文,请不要崩溃,但不要执行任何操作)。。。