glGenVertexArrays 导致分段错误,如何正确设置 OpenGL 上下文?

问题描述

我正在尝试编写一个简单的三角形。但是,每当我运行 glGenVertexArrays(1,&VertexArrayID) 时都会导致分段错误

SDL_Init(SDL_INIT_VIDEO);

SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK,SDL_GL_CONTEXT_PROFILE_CORE);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION,3);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MInor_VERSION,2);
SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE,8);

SDL_Window* window = SDL_CreateWindow("OpenGL",SDL_WINDOWPOS_CENTERED,WINDOW_WIDTH,WINDOW_HEIGHT,SDL_WINDOW_OPENGL);
SDL_GLContext context = SDL_GL_CreateContext(window);

SDL_Event event;
SDL_bool quit = SDL_FALSE;

gluint VertexArrayID;
glGenVertexArrays(1,&VertexArrayID); // This causes crash

在这里找到了完全相同的东西OpenGL Segfaults on glGenVertexArrays但是

我忘记设置 OpenGL 上下文。现已全部修复。

没有帮助,因为我相信我已经创建了一个 OpenGL 上下文 SDL_GLContext context = SDL_GL_CreateContext(window);

如何正确设置 OpenGL 上下文?

解决方法

你必须Initialize GLEW。创建 OpenGL 上下文后立即调用 glewInit

SDL_GLContext context = SDL_GL_CreateContext(window);

if (glewInit() != GLEW_OK)
{
    // error handling
    // [...]
}

请注意,如果成功,glewInit 将返回 GLEW_OKglewInit 初始化 OpenGL 函数的函数指针。如果尝试通过未初始化的函数指针调用该函数,则会发生分段错误。