【问题标题】:Cannot create GLFWwindow in C++ - glfwCreateWindow returns nullptr?无法在 C++ 中创建 GLFWwindow - glfwCreateWindow 返回 nullptr?
【发布时间】:2016-06-11 03:30:33
【问题描述】:

在对代码进行多次测试后,我确定 GLFW 和 GLEW 都已成功初始化,但当我尝试创建一个用于 GLFW 函数的 GLFWwindow* 对象时,glfwCreateWindow() 函数返回一个 nullptr .为什么会这样,我该如何解决?这是我的代码:

#include <iostream>
#define GLEW_STATIC
#include <GL/glew.h>
#include <GLFW/glfw3.h>

const GLuint windowWidth = 500, windowHeight = 500;

int main()
{
    glfwInit();

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

    GLFWwindow* window = glfwCreateWindow(windowWidth, windowHeight, "Learn OpenGL", nullptr, nullptr);
    if (window == nullptr) {
        std::cout << "Failed to create GLFW window!" << std::endl;
        char myvar1; std::cin >> myvar1;
        glfwTerminate();
        return -1;
    }
    glfwMakeContextCurrent(window);
    glewExperimental = GL_TRUE;
    if (glewInit() != GL_TRUE) {
        std::cout << "Failed to initialize GLEW" << std::endl;
        char myvar2; std::cin >> myvar2;
        return -1;
    }

    glViewport(0, 0, windowWidth, windowHeight);
    while (!glfwWindowShouldClose(window)) {
        glfwPollEvents();
        glfwSwapBuffers(window);
    }

    glfwTerminate();

    return 0;
}

【问题讨论】:

  • 文档说“Windows:如果 Microsoft GDI 软件 OpenGL 实现是唯一可用的,则窗口创建将失败。”您使用的是什么显卡,是否有最新的驱动程序,您是在运行远程桌面还是在控制台会话中?
  • 使用 1.9GHz Celeron 的板载显卡。我会尝试更新驱动程序。
  • 使用 OpenGL Extensions Viewer 确认您的 GPU 确实支持 3.3。我遇到了同样的问题,事实证明 Parallels 的 GPU 仿真只能达到 3.2,但这就是我尝试在 VM 上做图形的结果。

标签: c++ visual-studio opengl glfw glew


【解决方案1】:

这可能是因为您为上下文创建指定了 3.3 版本,而您的 opengl 版本低于 3.3。

OpenGL:GLFW_CONTEXT_VERSION_MAJOR 和 GLFW_CONTEXT_VERSION_MINOR 不是硬约束,但如果创建的上下文的 OpenGL 版本低于请求的版本,则创建将失败。

如果您使用的是具有 2 个 GPU 的笔记本电脑,则可能会发生这种情况。他们这样做是出于功耗的原因,大多数应用程序将使用标准 GPU 运行,例如游戏将使用高性能的。

例如,我的笔记本电脑内置了 Intel(R) HD Graphics 3000(3.1 opengl 版本)GPU 和 NVIDIA geforce gt 630M(4.4 opengl 版本)GPU。

如果您右键单击应用程序快捷方式并选择“使用图形处理器运行”,则可以查看您的笔记本电脑是否具有此功能:-“高性能(NVIDIA)处理器”-“集成图形(默认)”

问题在于编辑器(eclipse/ms Visual Studio 等)(您在其中运行代码)将使用默认版本,并且通常具有比您的其他 GPU 低得多的 opengl 版本。

您可以通过始终使用高性能 GPU 运行编辑器程序来解决此问题。

如果您没有使用笔记本电脑或只有一个 GPU,请尝试更新您的驱动程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 2013-05-11
    • 2021-07-21
    • 1970-01-01
    • 2018-05-23
    • 1970-01-01
    • 2021-05-22
    相关资源
    最近更新 更多