我正在编写一个适用于Mac OS X上的OpenGL的C ++应用程序。
我尝试过GLFW和Freeglut用于窗口管理。
glfw和freeglut都已安装brew
有些事我不明白。
这是我的FreeGlut C ++代码:
int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
glutInitContextVersion (3, 3);
glutInitContextFlags (GLUT_CORE_PROFILE | GLUT_DEBUG);
glutInitWindowSize(WIDTH, HEIGHT);
glutCreateWindow("Test");
glewExperimental = GL_TRUE;
GLenum err = glewInit();
if (GLEW_OK != err)
{
return -1;
}
cout < <"GL_SHADING_LANGUAGE_VERSION: "<< glGetString (GL_SHADING_LANGUAGE_VERSION) << endl;
...
有输出:
GL_SHADING_LANGUAGE_VERSION: 1.20
这是我用GLFW的C ++代码:
int main(int argc, const char * argv[])
{
if (!glfwInit())
{
return -1;
}
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
window = glfwCreateWindow(640, 480, "Test", NULL, NULL);
if (window == NULL) {
return -1;
}
glfwMakeContextCurrent(window);
glewExperimental = true;
if (glewInit() != GLEW_OK) {
return -1;
}
std::cout << "GL_SHADING_LANGUAGE_VERSION: " << glGetString(GL_SHADING_LANGUAGE_VERSION) << std::endl;
这是输出:
GL_SHADING_LANGUAGE_VERSION: 4.10
我的问题是为什么GLSL版本不一样?
由于
答案 0 :(得分:1)
过剩初始化是错误的。 GLUT_CORE_PROFILE
不是glutInitContextFlags
的有效参数。正确的代码应如下所示:
glutInitContextVersion(3, 3);
glutInitContextProfile(GLUT_CORE_PROFILE);
glutInitContextFlags(GLUT_DEBUG);
另请注意,您并未在两个示例中请求相同的配置文件。 GLUT示例要求3.3 Core with Debug,而glfw示例要求3.3 Core具有前向兼容性。