glGetString(GL_VERSION) 得到哪个版本?

sm8*_*095 4 opengl

是否glGetString(GL_VERSION)获取您的系统支持的最大版本,或者您当前环境的版本?

我知道您需要创建一个上下文才能glGetString()工作,因此这让我想知道它是当前上下文还是最高可用上下文。

Ret*_*adi 5

来自规范(从 3.3 规范文档复制):

字符串查询返回指向 UTF-8 编码、以 NULL 结尾的静态字符串的指针,描述当前 GL 上下文的属性。

所以它是当前上下文支持的版本。如果您在客户端/服务器设置中进行操作,则有一个微妙的方面:

GetString 返回当前 GL 上下文可以支持的版本号(在 VERSION 字符串中)。因此,如果客户端和服务器支持不同版本,则返回兼容版本。

根据我的阅读方式,如果两个版本不同,它将返回客户端和服务器之间的最小值。

通常使用glGetIntegerv()检查版本更容易。这样,您不必开始解析字符串,并且还可以获得额外的详细信息:

GLint majVers = 0, minVers = 0, profile = 0, flags = 0;
glGetIntegerv(GL_MAJOR_VERSION, &majVers);
glGetIntegerv(GL_MINOR_VERSION, &minVers);
glGetIntegerv(GL_CONTEXT_PROFILE_MASK, &profile);
glGetIntegerv(GL_CONTEXT_FLAGS, &flags);

if (profile & GL_CONTEXT_CORE_PROFILE_BIT) {
    ...
}

if (profile & GL_CONTEXT_COMPATIBILITY_PROFILE_BIT) {
    ...
}

if (flags & GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT) {
    ...
}
Run Code Online (Sandbox Code Playgroud)