Var*_*red 2 opengl macos glut freeglut opengl-4
我正在尝试在支持 OpenGL 4.1 的 OSX Mavericks 上学习 OpenGL。
我保持基本并使用 gcc (g++) 进行编译,但是当通过 Freeglut OSX 加载开放的 GL 上下文时,会加载旧的 OpenGL 配置文件。
我试过这个:OpenGL 3.3 on OSX with FreeGLUT但没有运气, glGetString 调用返回这些值:
NVIDIA GeForce GT 750M OpenGL Engine
2.1 NVIDIA-8.24.9 310.40.25f01
Run Code Online (Sandbox Code Playgroud)
谁有想法?
我正在使用以下上下文调用调用 FreeGlut:
glutInitContextVersion(3,2);
glutInitContextProfile(GLUT_CORE_PROFILE);
Run Code Online (Sandbox Code Playgroud)
编辑:刚刚在 Windows 而不是 OSX 中尝试了相同的应用程序并收到此错误:
2.1 已请求上下文但 wglCreateContextAttribsARB 不可用。回退到遗留上下文创建
这是我的应用程序入口点
int main (int argc, char * argv[])
{
try{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA);
glutInitWindowSize(512,512);
glutInitContextVersion(4,2);
glutInitContextFlags(GLUT_FORWARD_COMPATIBLE);
glutInitContextProfile(GLUT_CORE_PROFILE);
cout << "Called GLUT with 'GLUT_FORWARD_COMPATIBLE' \n";
//cout << VAO_IDs::NumVAOs;
glutCreateWindow("Triangles!");
cout << "Calling GLEW. " << endl;
glewExperimental = GL_TRUE;
if(glewInit())
{
cerr << "unable to initialise GLEW.. Exiting " << endl;
}
cout << "calling init " << endl;
init();
cout << "Setting display function " << endl;
glutDisplayFunc(display);
cout << "Entering loop " << endl;
glutMainLoop();
}
catch (exception)
{
cerr << "ERROR! " <<endl;
}
}
Run Code Online (Sandbox Code Playgroud)
好的 所以...
在 Windows PC 上重新编译,没有问题,可能是 OSX 上的 FreeGLUT 或 OSX 本身或组合的问题。
至少现在我有了可以测试 OSX 的代码......
OSX Mavericks不支持OpenGL 4.2. 因此,不可能创建 4.2 上下文。最后支持的版本是4.1+ 一些在4.2.
如果您想今天发货,唯一的选择是使用OpenGL 4.1扩展。
这是代码GLFW3:
glfwWindowHint( GLFW_CONTEXT_VERSION_MAJOR, 4 );
glfwWindowHint( GLFW_CONTEXT_VERSION_MINOR, 1 );
glfwWindowHint( GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE );
glfwWindowHint( GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE );
Run Code Online (Sandbox Code Playgroud)