我怎么知道我的系统支持哪个opengl版本

Bob*_*421 5 opengl glfw

看一下这个非常基本的C ++代码:

if(!glfwInit())
{
    return -1;
}
glfwWindowHint(GLFW_SAMPLES, 4);
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);

window = glfwCreateWindow(640, 480, "Test", NULL, NULL);
if (window==NULL)
{
    return -1;
}
glfwMakeContextCurrent(window);

std::cout << "GL_VERSION: " << glGetString(GL_VERSION) << std::endl;
Run Code Online (Sandbox Code Playgroud)

我不明白我如何“检测”我可以在行中设置的最大opengl版本:

glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
Run Code Online (Sandbox Code Playgroud)

该行不能放置在glfwMakeContextCurrent

glGetString(GL_VERSION)
Run Code Online (Sandbox Code Playgroud)

所以我的问题是我如何在程序开头检测系统支持的opengl版本。

谢谢

Rab*_*d76 5

请参阅GLFW指南-窗口创建提示,其中明确指出:

GLFW_CONTEXT_VERSION_MAJORGLFW_CONTEXT_VERSION_MINOR指定创建的上下文必须兼容的客户端API版本。这些提示的确切行为取决于所请求的客户端API。

OpenGL:GLFW_CONTEXT_VERSION_MAJOR并且GLFW_CONTEXT_VERSION_MINOR不是硬性约束,但是如果所创建上下文的OpenGL版本小于所请求的上下文,则创建将失败。因此,将1.0版的默认值用于旧版代码是绝对安全的,并且在可用时仍会获得3.0版及更高版本的向后兼容上下文。

虽然无法向驱动程序询问支持的最高版本的上下文,但是当您要求版本1.0的上下文时,GLFW会尝试提供该上下文,这是这些提示的默认设置。


这意味着,如果您想获得尽可能高的OpenGL上下文,则可以完全跳过glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, )glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, )

创建上下文后,可以使用来请求上下文版本glGetString(GL_VERSION)

但是,如果您的应用程序要求最低的OpenGL版本,则需要使用以下命令告知GLFW:

glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, required_major);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, required_minor);
Run Code Online (Sandbox Code Playgroud)

glfwCreateWindow 如果无法满足要求,则将失败。


您问题的答案

我怎么知道我的系统支持哪个opengl版本?

是:

您必须先创建一个OpenGL上下文,然后才能通过要求版本 glGetString(GL_VERSION)


答案的更正

如评论中所述,当您尝试创建核心配置文件上下文时,此方法将失败

这意味着您不能使用:

glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
Run Code Online (Sandbox Code Playgroud)

  • 嗯,这也没有错,特别是在用户未创建核心配置文件的情况下。有了更新中的评论,我看不出有任何理由删除它。另请注意,反对票并非来自我。 (3认同)
  • 实际上,当人们尝试创建核心配置文件上下文时,这种方法将失败。 (2认同)