Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ wglGetProcAddress返回NULL_C++_Opengl_Wgl - Fatal编程技术网

C++ wglGetProcAddress返回NULL

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*

我尝试使用WGL_ARB_pbuffer进行OpenGL的屏幕外渲染,

但我在初始化过程中失败了。

这是我的代码

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)也需要它(如果未设置上下文,请不要崩溃,但不要执行任何操作)。。。