【发布时间】:2016-06-20 11:05:46
【问题描述】:
我试图了解 glGetString(GL_VERSION) 返回什么,因为我在使用这个函数时得到了奇怪的结果。这会返回我的 GPU 支持的最大 opengl 版本还是创建的当前上下文的 oepngl 版本。根据Which version does glGetString(GL_VERSION) get?,这将返回当前创建的上下文的 opengl 版本,但我认为情况并非如此。我想强制创建opengl context 3.1(向前兼容)、opengl context 2.0和opengl context 1.1。以下是我的观察
案例 1:使用 wglCreateContextAttribsARB 创建上下文。我认为它正在返回最高的 opengl 上下文版本 子案例1:
int attribs[] =
{
WGL_CONTEXT_MAJOR_VERSION_ARB, 3,
WGL_CONTEXT_MINOR_VERSION_ARB, 3,
WGL_CONTEXT_PROFILE_MASK_ARB, WGL_CONTEXT_CORE_PROFILE_BIT_ARB,
0
};
//glGetString(GL_VERSION) returns "4.3.0 - Build 10.18.14.4264"
子案例 2:
int attribs[] =
{
WGL_CONTEXT_MAJOR_VERSION_ARB, 3,
WGL_CONTEXT_MINOR_VERSION_ARB, 1,
WGL_CONTEXT_FLAGS_ARB, WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB,
0
};
//glGetString(GL_VERSION) returns "4.3.0 - Build 10.18.14.4264"
子案例 3:
int attribs[] =
{
WGL_CONTEXT_MAJOR_VERSION_ARB, 2,
WGL_CONTEXT_MINOR_VERSION_ARB, 0,
0
};
//glGetString(GL_VERSION) returns "4.3.0 - Build 10.18.14.4264"
子案例 4:
int attribs[] =
{
WGL_CONTEXT_MAJOR_VERSION_ARB, 1,
WGL_CONTEXT_MINOR_VERSION_ARB, 1,
0
};
//glGetString(GL_VERSION) returns "4.3.0 - Build 10.18.14.4264"
案例2:使用glut创建opengl上下文
子案例 1:
glutInitContextVersion (3, 1);
glutInitContextFlags (GLUT_FORWARD_COMPATIBLE);
//glGetString(GL_VERSION) returns "3.1.0 - Build 10.18.14.4264"
子案例 2:
glutInitContextVersion (2, 0);
//glGetString(GL_VERSION) returns "4.3.0 - Build 10.18.14.4264"
子案例 3:
glutInitContextVersion (1, 1);
//glGetString(GL_VERSION) returns "4.3.0 - Build 10.18.14.4264"
谁能解释一下这种行为。我可以在创建上下文的地方发布完整的代码。 也有人可以指导我如何使用 glut 和 wglCreateContextAttribsARB 创建 opengl 3.1(前向兼容上下文)、opengl 2.0 上下文和 opengl 1.1 上下文?
【问题讨论】:
-
我如何理解旧的 OpenGL 上下文 (
-
但是当我将 wglCreateContextAttribsARB 与 3.1 前向兼容上下文的属性一起使用时,它仍然会打印“4.3.0 - Build 10.18.14.4264”。你所说的对opengl 2.0和opengl 1.1有意义。我还尝试为 opengl 3.3 创建核心上下文,但它仍然显示 opengl 版本 4.3。我已经更新了我的问题。请看一下
-
我认为在情况 1 中您使用 wglCreateContextAttribs 错误。因为我看到 glut 正确地创建了 3.1。你能添加代码吗?
-
是的,我在第一种情况下遇到了错误。所以我应该假设你在第一条评论中所说的是正确的。对于 3.0,它显示当前上下文版本。我希望我刚才写的正是你在评论中的意思。对吗?