【问题标题】:Loading an OpenGL 4.1 context on OSX在 OSX 上加载 OpenGL 4.1 上下文
【发布时间】:2014-04-07 20:25:08
【问题描述】:

我正在尝试在 OSX Mavericks 上学习 OpenGL,它目前支持 OpenGL 4.1。

我保持基本并使用 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

有人有什么想法吗?

我正在使用以下上下文调用调用 FreeGlut:

glutInitContextVersion(3,2);
glutInitContextProfile(GLUT_CORE_PROFILE);

编辑: 刚刚在 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;
    }

    }

好吧……

在 Windows PC 上重新编译,没有问题,可能是 OSX 上的 FreeGLUT 或 OSX 本身或组合的问题。

至少现在我有可以用来测试 OSX 的代码...

【问题讨论】:

  • 你必须在 OSX 上创建一个 forwad 兼容的上下文
  • 我该怎么做?
  • glutInitContextFlags(GLUT_FORWARD_COMPATIBLE); 可能会成功
  • 谢谢,我试试看。
  • 把那个放进去,可惜没用。你知道我在哪里可以获得 glutInitContextProfile 的选项列表吗?那会很有用。

标签: macos opengl glut freeglut opengl-4


【解决方案1】:

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 );

【讨论】:

  • 嗨,即使在请求 4.1 上下文时,我也遇到 GLEW 或 Gl3w 无法检索函数指针的问题。
  • @VariableDeclared:我必须体验 GLEW,但 GLFW3 运行顺畅。我在答案中添加了一些代码。
猜你喜欢
  • 2014-12-12
  • 2015-08-02
  • 2014-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-24
相关资源
最近更新 更多