gpt4 book ai didi

c++ - glGetString(GL_VERSION) 与请求的版本不匹配

转载 作者:行者123 更新时间:2023-11-30 03:40:33 25 4
gpt4 key购买 nike

我试图了解 glGetString(GL_VERSION) 返回的内容,因为我在使用此函数时得到了奇怪的结果。这是否返回我的 GPU 支持的最大 opengl 版本或当前创建的上下文的 oepngl 版本。根据Which version does glGetString(GL_VERSION) get?这将返回创建的当前上下文的 opengl 版本,但我认为情况并非如此。我想强制创建 opengl 上下文 3.1(向前兼容)、opengl 上下文 2.0 和 opengl 上下文 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 上下文?

最佳答案

glGetString(GL_VERSION) 返回当前上下文的版本。这通常可以是(但不总是)支持的最高版本。

原因在 opengl 规范中:

The attribute names WGL_CONTEXT_MAJOR_VERSION_ARB and WGL_CONTEXT_MINOR_VERSION_ARB request an OpenGL context supporting the specified version of the API. If successful, the context returned must be backwards compatible with the context requested.

然后继续说明,如果您请求低于 3.0 的版本,那么上下文可以是 3.2 或更高版本,前提是它们在兼容性配置文件中。它给你 4.3.0 只是因为它应该工作。

如果您要求 3.1,它还可以为您提供任何超过 3.2 的 GL 的核心版本。如果您请求 3.2 或更高版本,它也可以为您提供任何更高版本,前提是没有删除任何功能。据我所知,目前还没有。

https://www.opengl.org/registry/specs/ARB/wgl_create_context.txt

关于c++ - glGetString(GL_VERSION) 与请求的版本不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37920926/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com