在我的软件中,我正在生成一个虚拟窗口,以便查询Windows各种像素格式,然后销毁该窗口,然后在选择适当的格式后创建一个新窗口。
初始化第一个窗口后,我使用glewInit()初始化glew以使用wglChoosePixelFormatARB函数。虽然在破坏虚拟窗口之后,扩展继续起作用,但我知道这在技术上并不“正确”,因为理论上两个窗口可能有两组不同的函数指针。因此,我想在创建第二个窗口后第二次初始化glew。
当我这样做时,我之后会从普通函数中得到错误,例如:
GLint viewport[4];
::glGetIntegerv(GL_VIEWPORT, viewport);
,glError为1280 - 虽然奇怪的是,当我检查视口时,它似乎包含正确的值(我正在查看glGetError()以查看上一个命令是否导致错误)。
所以,我的问题是这样的:用两个状态OpenGL初始化你似乎需要Windows(创建虚拟窗口,初始化扩展,使用扩展,破坏虚拟窗口,创建实际窗口),你如何第二次初始化glew当新窗口是当前上下文?
答案 0 :(得分:1)
你可以首先检索wglChoosePixelFormatARB的函数指针(我认为使用wglGetProcAddress),然后在创建第二个窗口后初始化glew。
答案 1 :(得分:1)
我建议仅在创建主窗口后销毁虚拟窗口/上下文。另外,正如Slicedpan alread建议的那样,你只需要一个扩展函数,所以我手动加载它们不依赖于GLEW。你还确定,你第二次调用glewInit()是在你创建了正确的OpenGL上下文之后并且在线程GLEW函数即将被使用?