glGenBuffer 导致分段错误
glGenBuffer causes segmentation fault
将 glGenBuffers 与几乎任何其他 gl 函数一起使用时,程序在启动时崩溃
#define GL_GLEXT_PROTOTYPES
#include </usr/include/GLFW/glfw3.h>
#include <iostream>
int main()
{
glfwInit();
GLFWwindow *wd = glfwCreateWindow(900, 800, "main window", NULL, NULL);
glfwMakeContextCurrent(wd);
GLuint *buffer;
glGenBuffers(1, buffer);
glBindBuffer(GL_ARRAY_BUFFER, *buffer);
while (!glfwWindowShouldClose(wd))
{
glfwPollEvents();
}
glfwTerminate();
}
变化:
GLuint *buffer;
glGenBuffers(1, buffer);
glBindBuffer(GL_ARRAY_BUFFER, *buffer);
至:
GLuint buffer;
glGenBuffers(1, &buffer);
glBindBuffer(GL_ARRAY_BUFFER, buffer);
问题是:您为 OpenGL 提供了一个未初始化变量的值,它会将其视为存储缓冲区 ID 的内存位置。
相反,您应该声明一个 stack/local 变量并使用指向该变量的指针(这是一个有效的地址位置)来提供 OpenGL。
将 glGenBuffers 与几乎任何其他 gl 函数一起使用时,程序在启动时崩溃
#define GL_GLEXT_PROTOTYPES
#include </usr/include/GLFW/glfw3.h>
#include <iostream>
int main()
{
glfwInit();
GLFWwindow *wd = glfwCreateWindow(900, 800, "main window", NULL, NULL);
glfwMakeContextCurrent(wd);
GLuint *buffer;
glGenBuffers(1, buffer);
glBindBuffer(GL_ARRAY_BUFFER, *buffer);
while (!glfwWindowShouldClose(wd))
{
glfwPollEvents();
}
glfwTerminate();
}
变化:
GLuint *buffer;
glGenBuffers(1, buffer);
glBindBuffer(GL_ARRAY_BUFFER, *buffer);
至:
GLuint buffer;
glGenBuffers(1, &buffer);
glBindBuffer(GL_ARRAY_BUFFER, buffer);
问题是:您为 OpenGL 提供了一个未初始化变量的值,它会将其视为存储缓冲区 ID 的内存位置。 相反,您应该声明一个 stack/local 变量并使用指向该变量的指针(这是一个有效的地址位置)来提供 OpenGL。