【问题标题】:Unable to retrieve version information from OpenGL 3.2 / 3.3无法从 OpenGL 3.2 / 3.3 检索版本信息
【发布时间】:2011-03-14 21:08:45
【问题描述】:

我已按照此处的基本说明进行操作:

http://www.opengl.org/wiki/Tutorial:_OpenGL_3.1_The_First_Triangle_%28C%2B%2B/Win%29#Rendering_Context_Creation

我唯一调整的是将上下文创建为 3.2 或 3.3:

const int attributes[] =
{
    WGL_CONTEXT_MAJOR_VERSION_ARB, 3,
    WGL_CONTEXT_MINOR_VERSION_ARB, 2,
    WGL_CONTEXT_FLAGS_ARB, WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB,
    0
};

然后在创建上下文后(返回 TRUE 表示成功)我检查版本:

// Double check the version (old way)
const GLubyte *const pszGLVersion = glGetString(GL_VERSION);

// Double check the version (new way)
GLint glVersion[2];
glGetIntegerv(GL_MAJOR_VERSION, &glVersion[0]);
glGetIntegerv(GL_MINOR_VERSION, &glVersion[1]);

但是,pszGLVersion 为 NULL,并且 glVersion[0] 和 glVersion[1] 都未初始化!

为什么 OpenGL 3.2 & 3.3 上下文创建成功,但是却无法获取版本信息?

【问题讨论】:

  • 上下文创建不返回布尔值。它返回一个上下文句柄。你确定成功了吗?
  • 是的,我确定它成功了,调用成功返回了一个 HGLRC 结构。
  • 上下文是否也被激活了?创建上下文不会自动激活它 → wglMakeCurrent

标签: c opengl opengl-3


【解决方案1】:

您是否使上下文成为最新的?您会注意到 glGetString 不带上下文参数,它适用于当前上下文。在调用wglMakeCurrent 之前,您不能使用它,默认情况下不会将新创建的上下文设为当前。

【讨论】:

  • 嗨,Ben,是的,我的代码与 URL 中的示例几乎相同。我创建了一个 OpenGL 2.1 上下文,然后使用它来创建一个 OpenGL 3.2 或 3.3 上下文。仅供参考,OpenGL 3.1 返回有效的版本信息。
【解决方案2】:

我认为我无法获取版本信息的原因是因为我的显卡不支持 3.2 或 3.3。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2013-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多