4

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

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

这是我的代码。

wglGetExtensionsStringARB = (PFNWGLGETEXTENSIONSSTRINGARBPROC) wglGetProcAddress("wglGetExtensionsStringARB");
if(!wglGetExtensionsStringARB) return;
const GLubyte* extensions = (const GLubyte*) wglGetExtensionsStringARB(wglGetCurrentDC());

所以实际上这在第二行结束,因为 wglGetExtensionsStringARB 得到了 NULL。

我不知道为什么 wglGetProcAddress 不起作用。

我包括了“wgext.h”,并且我在标题中定义如下。

PFNWGLGETEXTENSIONSSTRINGARBPROC    pwglGetExtensionsStringARB = 0;
#define wglGetExtensionsStringARB   pwglGetExtensionsStringARB

为什么我不能按预期使用 wglGetProcAddress?

4

1 回答 1

14

wglGetProcAddress需要 OpenGL 渲染上下文;你需要打电话给你的wglCreateContextwglMakeCurrent之前打电话wglGetProcAddress。如果您尚未设置 OpenGL 上下文,wglGetProcAddress将始终返回NULL. 如果您不确定是否有 OpenGL 上下文(例如,如果您使用的是 3rd 方框架/库),请调用wglGetCurrentContext并检查以确保它没有返回NULL.

于 2014-02-14T05:48:08.173 回答