0

在我的软件中,我正在生成一个虚拟窗口以查询 Windows 的各种像素格式,然后销毁该窗口,然后在选择适当的格式后创建一个新窗口。

初始化第一个窗口后,我使用 glewInit() 初始化 glew 以使用 wglChoosePixelFormatARB 函数。尽管在销毁虚拟窗口后,扩展继续运行,但我知道这在技术上并不“正确”,因为理论上两个窗口可能有两组不同的函数指针。因此,我想在创建第二个窗口后再次初始化 glew。

当我这样做时,我会从普通函数中得到错误,例如:

GLint viewport[4];

::glGetIntegerv(GL_VIEWPORT, viewport);

, glError 为 1280 - 虽然奇怪的是,当我检查视口时,它似乎包含正确的值(我正在查看 glGetError() 以查看上一个命令是否导致错误)。

所以,我的问题是:使用 Windows 所需的两种状态 OpenGL 初始化(创建虚拟窗口、初始化扩展、使用扩展、销毁虚拟窗口、创建实际窗口),当新的window 是当前上下文吗?

4

2 回答 2

1

我建议您仅在创建主窗口后才销毁虚拟窗口/上下文。此外,正如 Slicedpan 已经建议的那样,您只需要一个完整的扩展功能,所以我会手动加载它们而不依赖 GLEW。您还确定,您对 glewInit() 的第二次调用是在您创建正确的 OpenGL 上下文并在即将使用 GLEW 函数的线程上成为当前的之后?

于 2013-01-19T19:28:42.393 回答
1

您可以首先检索 wglChoosePixelFormatARB 的函数指针(我认为使用 wglGetProcAddress),然后在创建第二个窗口后初始化 glew。

于 2013-01-18T18:20:46.130 回答