嗨,我正在尝试使用c++、高兴和glfw用OpenGL编写一个程序,但我遇到了一个无法解决的问题。
main.cpp
#include <glad/glad.h>
#include <GLFW/glfw3.h>
#include <iostream>
#define SCR_WIDTH 1280
#define SCR_Height 720
int main() {
GLFWwindow* window = init();
unsigned int VAO, VBO, EBO;
glGenVertexArrays(1, &VAO);
glGenBuffers(1, &VBO);
glGenBuffers(N_EBOS, &EBO);
//load vertices etc..
while (!glfwWindowShouldClose(window)) {
glfwSwapBuffers(window);
// Render stuff...
glfwPollEvents();
}
glfwTerminate();
return 0;
}
基本上如果我删除
glGenBuffers(N_EBOS, &EBO);
这一切都很好,但当我加上那一行,并且N_EBOS为15或更多时,程序在
glfwWindowShouldClose(window)
线在使用调试器后,我发现
glGenbuffers(N_EBOS, &EBO);
运行时
window
变量会改变值,我不知道它是如何或为什么这样做的。我还制作了一张gif来更好地显示问题:
对于更多上下文,这是
init();
作用
GLFWwindow* init() {
glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
#ifdef __APPLE__
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
#endif
GLFWwindow* window = glfwCreateWindow(SCR_WIDTH, SCR_HEIGHT, "Thing", nullptr, nullptr);
if (window == nullptr) {
std::cout << "Failed to create GLFW window" << std::endl;
glfwTerminate();
exit(1);
}
glfwMakeContextCurrent(window);
if (!gladLoadGLLoader((GLADloadproc) glfwGetProcAddress)) {
std::cout << "Failed to initialize GLAD" << std::endl;
exit(1);
}
glViewport(0, 0, SCR_WIDTH, SCR_HEIGHT);
return window;
}
那么,原因是什么,解决方案是什么呢?我试着在网上搜索,但没有成功。
我以为这可能是某种缓冲区溢出,但我看不出哪里会发生这种情况。
如果有帮助的话,我会将Clion与CMake、CPP 23、OpenGL 3.3和Arch Linux一起使用。