2013-01-18 56 views
0

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

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

当我这样做,我从普通功能出现错误后,像这样的:

GLint viewport[4]; 

::glGetIntegerv(GL_VIEWPORT, viewport); 

,与glError是1280 - 但奇怪的是,当我检查视,似乎包含正确的值(I查看glGetError()来查看前面的命令是否导致错误)。所以,我的问题是这样的:在Windows中需要两个状态OpenGL初始化(创建虚拟窗口,初始化扩展,使用扩展,破坏虚拟窗口,创建实际窗口),你如何初始化第二个新窗口是当前上下文的时间?

回答

1

我推荐在创建主窗口后才销毁虚拟窗口/上下文。另外,正如Slicedpan建议的那样,你只需要一个扩展函数,所以我会手动加载它们而不依赖于GLEW。你也确定,你的第二次调用glewInit()是在你已经创建了正确的OpenGL上下文之后创建了,使得当前线程上的GLEW函数即将被使用?

+0

我做到了,是的。它绝对活跃。我认为你自己正确地获取扩展。在任何情况下查看我需要在每个窗口中存储它们的内容(以确定它是正确的)。 GLEW支持glewContextInit,但这看起来也很痛苦。 – Robinson

1

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