GLGETSTRING(GL_VERSION)与请求的版本不匹配

The glGetString(GL_VERSION) does not match the requested version

本文关键字:请求 版本 不匹配 GL VERSION GLGETSTRING      更新时间:2023-10-16

我试图理解当我使用此功能时会得到奇怪的结果时,我会返回什么。这是否返回由我的GPU支持的最大OpenGL版本或创建当前上下文的OEPNGL版本。根据GLGETSTRING(GL_Version)获得哪个版本?此返回创建的当前上下文的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"

有人可以解释这种行为。我可以在创建上下文的位置发布完整的代码。另外,请有人指导我如何创建OpenGL 3.1(正向兼容上下文),OpenGL 2.0上下文和OpenGL 1.1使用Glut和WGLCreateContextAttribsarb?

均使用wglcreatecontextattribsarb?

glgetString(gl_version)返回当前上下文的版本。这通常可以是(但并非总是)最高支持的版本。

的原因是在OpenGL规范中:

属性名称wgl_context_major_version_arb和 WGL_CONTEXT_MINOR_VERSION_ARB请求OpenGL上下文支持 API的指定版本。如果成功的话,上下文 返回必须向后与所请求的上下文兼容。

然后继续指出,如果您请求3.0以下的版本,则上下文可以是版本3.2或更大的,只要它们处于兼容性配置文件中即可。它为您提供4.3.0,只是因为它应该起作用。

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

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