INVALID_ENUM using glew

INVALID_ENUM using glew

本文关键字:glew using ENUM INVALID      更新时间:2023-10-16

我目前正在尝试使用SDL和glew在c++中编程一个litte游戏。我的问题是,每当我尝试使用glew的函数(例如:glMatrixMode(GL_PROJECTION))时,我都会收到以下错误:GL_INVALID_ENUM。

这就是我创建窗口的方式:

SDL_Init(SDL_INIT_EVERYTHING);
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);
window = SDL_CreateWindow(title.c_str(), SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, width, height, SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE);
context = SDL_GL_CreateContext(window);
SDL_GL_SetSwapInterval(1);

这就是我初始化glew:的方式

glewExperimental = GL_TRUE;
GLenum res = glewInit();
if (res != GLEW_OK) fprintf(stderr, "Error: '%s'n", glewGetErrorString(res));

我也试着禁用glewExperimental,但它什么也没改变。

问题是我使用了OpenGL的核心配置文件,而不是使用兼容性配置文件来使用API中不推荐使用的部分。要解决此问题,应更换

SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);

带有:

SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_COMPATIBILITY);