c++ - GLFW 无法在 Mavericks 上获得 OpenGL 4.1 上下文

标签 c++ macos opengl glew glfw

我正在尝试使用 GLFW 在 Mac 上获取版本 2 以上的 OpenGL 上下文。我的配置是 Mavericks (10.9.1) + XCode,我有一个可能支持 OpenGL 4.1 Full Profile 的 Nvidia Geforce 650M GPU。我使用以下代码:

    static void test_error_cb (int error, const char *description)
{
    fprintf(stderr, "%d: %s\n", error, description);
}

主要内容(无效) { GLFWwindow* 窗口;

glfwSetErrorCallback(test_error_cb);

// Initialise GLFW
if (!glfwInit())
{
    fprintf(stderr, "Failed to initialize GLFW\n");
    exit(EXIT_FAILURE);
}


//Request Specific Version
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

// Open OpenGL window
window = glfwCreateWindow(500, 500, "Split view demo", NULL, NULL);
if (!window)
{
    fprintf(stderr, "Failed to open GLFW window\n");

    glfwTerminate();
    exit(EXIT_FAILURE);
}

// Set callback functions
glfwSetFramebufferSizeCallback(window, framebufferSizeFun);
glfwSetWindowRefreshCallback(window, windowRefreshFun);
glfwSetCursorPosCallback(window, cursorPosFun);
glfwSetMouseButtonCallback(window, mouseButtonFun);
glfwSetKeyCallback(window, key_callback);

// Enable vsync
glfwMakeContextCurrent(window);
glfwSwapInterval(1);

glfwGetFramebufferSize(window, &width, &height);
framebufferSizeFun(window, width, height);

//Check Version
int major, minor, rev;
major = glfwGetWindowAttrib(window, GLFW_CONTEXT_VERSION_MAJOR);
minor = glfwGetWindowAttrib(window, GLFW_CONTEXT_VERSION_MINOR);
rev = glfwGetWindowAttrib(window, GLFW_CONTEXT_REVISION);
printf("OpenGL version recieved: %d.%d.%d\n", major, minor, rev);
printf("Supported OpenGL is %s\n", (const char*)glGetString(GL_VERSION));
printf("Supported GLSL is %s\n", (const char*)glGetString(GL_SHADING_LANGUAGE_VERSION));


// Main loop
for (;;)
{
    // Only redraw if we need to
    if (do_redraw)
    {
        // Draw all views
        drawAllViews();

        // Swap buffers
        glfwSwapBuffers(window);

        do_redraw = 0;
    }

    // Wait for new events
    glfwWaitEvents();

    // Check if the window should be closed
    if (glfwWindowShouldClose(window))
        break;
}

// Close OpenGL window and terminate GLFW
glfwTerminate();

exit(EXIT_SUCCESS);

当前 glfwCreateWindow 函数失败。没有任何提示(即没有 glfwWindowHint 调用),我只能使用 glsl 版本为 1.20 的 OpenGL 2.1。建议。

最佳答案

在 OSX 上访问大于 2.1 的 GL 版本需要核心上下文。

取消注释您的 GLFW_OPENGL_PROFILE 提示。

关于c++ - GLFW 无法在 Mavericks 上获得 OpenGL 4.1 上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21715982/

相关文章:

c++ - 如何在std::function上使用模板扩展

c++ - 获取大小由变量定义的数组变量以进行赋值?

java - Mac 上的 SWT 问题

git - 使用 brew 在 MacOS 上安装特定的 git 版本

opengl - 使用带有 glew 的 VBO 访问冲突

c++ - 如何判断 g++ 和 clang 可用的 C++ 版本

c++ - Windows/C++ : how can I get a useful stack trace from a signal handler?

c# - (如何)使用 NSMenuItem 将文本从 <editor> 复制到剪贴板

OpenGL + SSH 上的 GLUT 段错误

cmake 在 OS X 上找不到 gl.h