环境
OpenGL 4.6
Arch Linux linux 6.4.4.arch1-1
KDE 5.27.6
GTX 1060 535.86.05
问题描述
生成顶点缓冲对象,也就是运行到glGenBuffers的时候,编译器会报signal SIGSEGV: invalid addres
原因
1、窗口没有初始化
2、没有获取到函数的内存地址
(这是我推测的,可能还有其他原因)
解决方法
在使用glGenBuffers前要做两件事:
1、创建一个窗口对象,上一节“你好,窗口”里有讲
GLFWwindow *window = glfwCreateWindow(800, 600, "HelloTrangle", NULL, NULL);
if (window == nullptr) {
std::cout << "Failed to create GLFW window" << std::endl;
glfwTerminate();
return -1;
}
glfwMakeContextCurrent(window);
2、初始化GLEW(注意,用了GLEW以后就不能用GLAD了),如果你和我一样使用Arch Linux,可以直接pacman -S glew
glewInit();
if (glewInit() != GLEW_OK) {
std::cout << stderr << "未能初始化glew";
return 1;
}
问题来源
这个教程里的代码本身不是问题,像流水账一样copy代码才是问题产生的原因
参考
"Hello Triangle" - Anton's OpenGL 4 Tutorials
glad VS glew 之 glGenbuffers | ShenYuanLuo的博客
https://bbs.csdn.net/topics/360064955 要判断glewInit()是不是GLEW_OK,这点很重要,不然都不知道哪来的报错(被自己蠢哭……)
还有一个问题
如果我要用GLAD而不是GLEW,我该怎么做呢?