在 C++ 中创建 GLFW OpenGL 窗口时遇到问题

Posted

技术标签:

【中文标题】在 C++ 中创建 GLFW OpenGL 窗口时遇到问题【英文标题】:Trouble Creating a GLFW OpenGL Window in C++ 【发布时间】:2021-12-29 04:32:13 【问题描述】:

这是我正在处理的当前代码:

int main() 

    glfwInit();

    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
    glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
    glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);

    GLFWwindow *window = glfwCreateWindow(WIDTH, HEIGHT, "OpenGL", NULL, NULL);

    if (nullptr == window) 
        std::cout << "Failed to create GLFW Window" << std::endl;
        glfwTerminate();

        return EXIT_FAILURE;
    

在运行时,没有创建窗口,我收到了失败消息。当我定义它时,我不明白为什么 window 是 nullptr。我错过了什么吗?感谢您的帮助。

【问题讨论】:

什么是操作系统?你确定GLFW_CONTEXT_VERSION_MINOR应该是0吗? 【参考方案1】:

根据 GLFW 文档,如果请求的 OpenGL 上下文版本低于 3.2,则 GLFW_OPENGL_PROFILE 窗口提示的值必须GLFW_OPENGL_ANY_PROFILE(并且 GLFW 每当 @987654322 时都有 a platform-independent check built-in @)。

见:https://www.glfw.org/docs/3.3/window_guide.html#GLFW_OPENGL_PROFILE_hint

GLFW_OPENGL_PROFILE 指定要为其创建上下文的 OpenGL 配置文件。可能的值是 GLFW_OPENGL_CORE_PROFILE 或 GLFW_OPENGL_COMPAT_PROFILE 之一,或 GLFW_OPENGL_ANY_PROFILE 不请求特定配置文件。如果请求低于 3.2 的 OpenGL 版本,则必须使用 GLFW_OPENGL_ANY_PROFILE。如果请求 OpenGL ES,则忽略此提示。

特别是部分:“如果请求低于 3.2 的 OpenGL 版本,则必须使用 GLFW_OPENGL_ANY_PROFILE。”

在您的情况下,您将收到 GLFW 错误。特别是exactly this one - 无论平台/操作系统如何,如果您通过glfwSetErrorCallback() 设置了 GLFW 错误处理函数,您就会看到。

【讨论】:

非常感谢您的帮助!

以上是关于在 C++ 中创建 GLFW OpenGL 窗口时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章

尝试在openGL中创建空白窗口时出现异常输出

如何使用 c++ 和 opengl 在 mac 中创建窗口?

为啥在 glfw 窗口上没有使用 opengl 显示位图图像?在 C++ 中读取位图图像文件时出现问题

C OpenGL glfw3三角形不显示

在 OpenGL 4 中创建第二个 VAO 并绘制两个形状

单击窗口 x 轴的末端时,通过鼠标单击在 OpenGL 中创建的光线不正确?