【问题标题】:Correct initialisation of GLEW using glewInit?使用 glewInit 正确初始化 GLEW?
【发布时间】:2013-01-18 16:04:12
【问题描述】:

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

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

当我这样做时,之后的普通函数会出错,例如:

GLint viewport[4];

::glGetIntegerv(GL_VIEWPORT, viewport);

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

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

【问题讨论】:

    标签: opengl glew


    【解决方案1】:

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

    【讨论】:

    • 我做到了,是的。它肯定是活跃的。我认为您自己获取扩展名是正确的。无论如何,看看我需要在每个窗口中存储它们的东西(以确保它是正确的)。 GLEW 支持 glewContextInit,但使用起来也很痛苦。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-10
      • 1970-01-01
      • 1970-01-01
      • 2012-11-17
      • 1970-01-01
      • 1970-01-01
      • 2020-10-12
      • 1970-01-01
      相关资源
      最近更新 更多