c++ - 声明变量使 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
循环一样。因此,我无法遵循本教程并检查我正在尝试实现的更多功能。
我究竟做错了什么?
解决方案
推荐阅读
- kubernetes - 指定 --nodes、master-size 等选项时,Jenkins-x 集群设置失败
- python - 在 Python 中合并多个 .txt/csv 文件
- java - 观察到调试 OOM 错误
- python-3.x - Python - 无法计算数据框中定义范围内值的出现次数
- javascript - 是否有可能第一个参数是可选的,而第二个参数在 Javascript 的函数中是强制性的?
- javascript - 在一组 json 数组中,下一个索引最小数量应大于上一个索引 MaxAmount
- angularjs - Accordion 不适用于最新版本的 ui-bootstrap-tpls.js
- java - 如何通过中间层将软件与其他软件集成
- angular - Angular - 无法使用 Coinmarketcap API 获取数据
- c# - C# IL 代码优化:条件运算符 (?:) 和相同变量的重新分配