看一下这个非常基本的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版本。
谢谢
请参阅GLFW指南-窗口创建提示,其中明确指出:
GLFW_CONTEXT_VERSION_MAJOR并GLFW_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)
| 归档时间: |
|
| 查看次数: |
2453 次 |
| 最近记录: |