当前位置: 首页 > 知识库问答 >
问题:

GLFW无法在Mavericks上获取OpenGL 4.1上下文

上官锦
2023-03-14

我正在尝试使用GLFW在mac上获得版本2以上的OpenGL上下文。我的配置是Mavericks(10.9.1)+XCode,我有一个Nvidia Geforce 650M GPU,可能支持OpenGL4.1的完整配置文件。我使用以下代码:

    static void test_error_cb (int error, const char *description)
{
    fprintf(stderr, "%d: %s\n", error, description);
}
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调用),我只能使用OpenGL2.1,glsl版本为1.20。劝告。

共有1个答案

印劲
2023-03-14

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

取消对glfw_opengl_profile提示的注释。

 类似资料:
  • 我有一个C++SFMLOpenGL4.1渲染引擎,我想移植到OS X10.9小牛。SFML似乎不支持OS X上的OpenGL4(或3)。如果我想坚持使用C++(我更喜欢避免Obj C)来获得OS X中的渲染上下文,我有什么选择?

  • 我一直在运行一个webserver和Coldfusion直到我升级到Mountain Lion,然后它就停止工作了。我让它再次工作了,把所有的东西重新打开,升级禁用了,但现在我已经升级到小牛,没有任何工作。我已经遵循了所有的步骤在各种web文章,但它不会工作。PHP被启用了,之前启用的所有东西都被设置好了,包括虚拟主机,所有的文件夹都在同一个地方。 我得到的错误是:Firefox无法在127.0.

  • 我开发了一个应用程序,使用推送通知。在Android上,我从pushRegistered(String deviceId)方法接收deviceId,推送通知非常有效。在iOS上不起作用。我用includePush=true获得了iOS证书,在构建提示中有includePush=true。当我运行应用程序时,pushRegistrated(String deviceId)、pushRegistrat

  • 我目前正在考虑处理OpenGL上下文重新创建。 我使用GLFW库创建OpenGL上下文,GL3W用于扩展加载器。 我的问题很简单:在重建上下文时,我是否应该考虑再次调用gl3wInit()?

  • 问题内容: 我从来没有进入过节点,所以我很确定自己在这里做错了很多事情,因为我无法通过谷歌搜索找到任何信息。 我有一个django网站,我想要一个JS图表库,我选择了chart.js。 我安装并喜欢这些文档,但是在此之后我不确定该怎么做,因此我尝试填写空白并尽可能地遵循其指南。这是我的html看起来像.... 我只是想让一个例子起作用。我将通过npm下载的node_modules目录放在我的服务器

  • 问题内容: 可能有人给我解释一下什么是获得这种方式的区别的? 性能或上下文本身是否有差异?如果是这样,那是最好的方法?还有其他检索上下文的方法吗? 问题答案: 还有一个。 从技术上讲,性能没有区别,只有会隐式创建HTTP会话对象(如果尚未创建)。因此,如果尚未完成,那么如果尚未创建会话,则通过会话获取servlet上下文可能要花费几纳秒的时间。 返回的上下文也没有区别。这些方法只是为了方便起见,获