glfwCreateWindow 在 Mac OS 上返回 NULL

Posted

技术标签:

【中文标题】glfwCreateWindow 在 Mac OS 上返回 NULL【英文标题】:glfwCreateWindow returns NULL on Mac OS 【发布时间】:2018-10-25 11:39:02 【问题描述】:

我正在使用 glew2.1 和 glfw3.2 在 Xcode10.0 Mac OS 10.14 上做我的 OpenGL 作业,但 glfwCreateWindow 总是返回 NULL。代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <GL/glew.h>
#include <GLFW/glfw3.h>
#include <iostream>

int main(int argc, const char * argv[]) 
    GLFWwindow* win;

    if(!glfwInit())
        return -1;
    

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

    win = glfwCreateWindow(640, 480, "test", NULL, NULL);

    if(!win)
    
        glfwTerminate();
        exit(EXIT_FAILURE);
    
    if(!glewInit())
    
        return -1;
    
    glfwMakeContextCurrent(win);
    while(!glfwWindowShouldClose(win))
        glfwSwapBuffers(win);
        glfwPollEvents();
    
    glfwTerminate();
    exit(EXIT_SUCCESS);
    return 0;

如果我删除 4 个 glfwWindowHint 语句,会出现一个窗口,但它是黑暗的,Xcode 控制台会抛出一个错误:设置为 window 的第一响应者,但它在不同的窗口中((null))!当视图被释放时,这最终会崩溃。第一响应者将被设置为 nil。

【问题讨论】:

根据http://www.glfw.org/docs/latest/intro_guide.html#error_handlingglfwCreateWindow 在发生错误时返回NULL。尝试使用 glfwSetErrorCallback 读取错误,如 http://www.glfw.org/docs/latest/intro_guide.html#error_handling 所示。 另外,您在 glewInit() 之后使 windows 上下文成为当前的,您应该在 glewInit 之前将上下文设置为当前的。 你可以做一个回调错误函数来查看详细原因。 \n void error_callback(int, const char* err_str) std::cout 【参考方案1】:

这两行:

glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

给我造成了这个问题。删除它们后,glfwCreateWindow() 不再返回 null。

【讨论】:

以上是关于glfwCreateWindow 在 Mac OS 上返回 NULL的主要内容,如果未能解决你的问题,请参考以下文章

glfwCreateWindow返回NULL问题

将窗口(glfwCreateWindow)作为子嵌入到 C++ MFC 父窗体

如何在Mac OS X上安装 Ruby运行环境

如何在Mac OS X上安装 Ruby运行环境

Mac OS 的一点历史: Mac OS, Mac OSX 与Darwin

Mac OS如何恢复出厂设置?安装Mac OS系统教程