OpenGL目前的最新版本是2017年发布的4.6版本,OpenGL老矣也不会再有更新了。尽管OpenGL是一套简单易用的图形API,但是很明显它并没有紧跟图形技术发展的脉搏,不仅仅落后于同时代的DirectX,其自身标准的取舍也使其变的碎片化。模式和兼容性就是其中恶心的一点,本文便是记录GLFW3在创建OpenGL上下文时设置模式和兼容性所设置的一些字段。
以前用GLFW3和OpenGL做一些demo时候,glfwWindowHint随意复制粘贴一下然后设置一下OpenGL
Context的版本和Profile即可,并没有过多理会其他的字段的含义和差别。毕竟使用Modern OpenGL或者Core Profile的OpenGL,并不需要在意兼容模式下大量的固定管线API的功能。但是,当实际使用中涉及到了glLineWidth这种从上古时代OpenGL
2.0时期延续至今并在OpenGL
4.6中Deprecated的API,更骚气的是其能不能work还要取决于硬件能力和驱动实现,多重buff于一身,某些字段的设置开始变的微妙起来了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 6); glfwWindowHint(GLFW_SAMPLES, 4); glfwWindowHint(GLFW_SCALE_TO_MONITOR, GLFW_TRUE);
std::cout << "Vendor " << glGetString(GL_VENDOR) << std::endl; std::cout << "Render " << glGetString(GL_RENDERER) << std::endl; std::cout << "GL " << glGetString(GL_VERSION) << std::endl; std::cout << "GLSL " << glGetString(GL_SHADING_LANGUAGE_VERSION) << std::endl; GLint profile; glGetIntegerv(GL_CONTEXT_PROFILE_MASK, &profile); std::cout << "Profile " << (profile & GL_CONTEXT_CORE_PROFILE_BIT ? "Core" : "Compatibility") << std::endl;
|