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

无法在 C 中创建 GLFWwindow - glfwCreateWindow 返回 nullptr?

暴博远
2023-03-14

在对代码运行了几次测试之后,我已经确定GLFW和GLEW都已成功初始化,但是当我尝试创建一个GLFWwindow*对象以用于GLFW函数时,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;
}

共有1个答案

皇甫展
2023-03-14

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

OpenGL:GLFW_CONTEXT_VERSION_MAJOR和GLFW-CONTEXT_ VERSION_ MINOR不是硬约束,但如果创建的上下文的OpenGL版本小于html" target="_blank">请求的版本,则创建将失败。

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

例如,我的笔记本电脑有一个内置的Intel(R)HDGraphics 3000(3.1 opengl版本)GPU和一个NVIDIA geforce gt630M(4.4 opengl版本)GPU。

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

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

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

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

 类似资料:
  • 我正在使用GLFW,只想打开一个空窗口。 我下载了适用于Windows 32的GLFW。创建了一个空控制台项目并编写了以下代码: 我认为我正确地添加了库和头文件。但是每次程序在glfwCreateWindow(..)函数,因为这个函数返回null。 有人能帮我吗?

  • 我在Xcode10.0 Mac OS 10.14上用glew2.1和glfw3.2做OpenGL作业,但是glfwCreateWindow总是返回NULL。代码如下: 如果我删除4 glfwWindowHint句子,将显示一个窗口,但它是黑暗的,并且Xcode控制台将抛出一个错误:设置为窗口的第一响应者,但它在另一个窗口中((空))!当视图被释放时,这最终会崩溃。第一个响应程序将设置为 nil。

  • 我有一个CSV数据集,我试图通过它在数据库中已经存在的两个节点类型(和)之间建立关系。 这是数据库信息- 问题是--无论我尝试哪个密码查询,它们都返回相同的东西--“无更改,无行”。 此查询只返回“no rows”。 我还尝试了该查询的一个变体,其中我没有使用函数,但这并没有什么不同。 为了确保节点存在,我从CSV文件中选择了随机单元格值,并使用子句来确保数据库中存在相应的和节点,并且找到了所有节

  • 我将如何在C#中为以下内容创建一个方法。 如果是奇数,则应返回整数/2。如果是偶数,则应返回自身相乘的整数。如果该整数为null,则应返回12345。 任何帮助都将不胜感激谢谢

  • 当我在Linux上调用时,它返回。相同的代码适用于Windows,并且我安装了适当的图形驱动程序。如何确定它返回 null 的原因? 编辑:结果它返回了null,因为我要求的OpenGL版本显然在我的上网本上不可用。这解决了我的问题,但没有真正回答我的问题。

  • 因此,我创建了我的对象数组,每个对象都被初始化为一个新字节[1024]: 然后,我遍历这个数组中的所有索引,执行如下操作: 在大多数情况下,一切都很好。但是,如果我希望每个字节数组都是可变长度的呢?也就是说,我希望字节数组的数组是“锯齿状”的。我将什么作为最后一个参数传递给NewObjectArray()作为初始值?我尝试传递0作为初始值,以防止在创建jobjectArray时进行初始化,然后分配