首页 > 解决方案 > 声明变量使 OpenGL 窗口关闭

问题描述

我只是在学习关于初学者 OpenGL 的教程并且遇到了一个相当奇怪的问题:当我声明 aGLuint vertexArrayId并尝试生成并绑定所述 id 时,主窗口(只是一个黑色窗口)不再保持打开状态。我的代码:

#include <GL/glew.h>
#include <GLFW/glfw3.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <cstdio>

const int WINDOW_HEIGHT = 600;
const int WINDOW_LENGTH = 800;

int main(int argc, char *args[])
{
    if (!glfwInit())
    {
        std::puts("Could not initialise GLFW");
        return -1;
    }

    glfwWindowHint(GLFW_SAMPLES, 4);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

    GLFWwindow *window;
    window = glfwCreateWindow(WINDOW_LENGTH, WINDOW_HEIGHT, "Window", nullptr, nullptr);

//  GLuint vertexArrayId;
//  glGenVertexArrays(1, &vertexArrayId);
//  glBindVertexArray(vertexArrayId);

    if (nullptr == window)
    {
        std::puts("Could not initialize window");
        glfwTerminate();
    }

    glfwMakeContextCurrent(window);

    if(glewInit() != GLEW_OK){
        std::puts("Could not initialize GLEW");
        return -1;
    }

    glfwSetInputMode(window, GLFW_STICKY_KEYS, GL_TRUE);

    while(glfwGetKey(window, GLFW_KEY_ESCAPE) != GLFW_PRESS and glfwWindowShouldClose(window) == 0){

        glClear(GL_COLOR_BUFFER_BIT);
        glfwSwapBuffers(window);
        glfwPollEvents();
    }

    return 0;
}

如果我留下这样的代码,黑色窗口会打开并保持打开状态,直到我按下 ESC 键。如果我取消注释该部分,则窗口不再保持打开状态并关闭,就好像没有while循环一样。因此,我无法遵循本教程并检查我正在尝试实现的更多功能。

我究竟做错了什么?

标签: c++opengl

解决方案


推荐阅读