2014-11-06 138 views
0

我目前正在尝试使用SDL和glew在C++中编程一个小型游戏。我的问题是,每当我尝试使用glew的函数(例如:glMatrixMode(GL_PROJECTION)),我得到这个错误:GL_INVALID_ENUM。INVALID_ENUM使用glew

这就是我创建的窗口:

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藏汉但什么也没有改变。

+5

好,'glMatrixMode'本身就是一个*** ***核心的OpenGL 3.2上下文无效的API调用。枚举“GL_PROJECTION_MATRIX”只是锦上添花。如果您想使用API​​的弃用部分,则需要使用*兼容性*配置文件。 'glMatrixMode'也不是一个glew函数。 – 2014-11-06 20:38:18

+0

如何更改为兼容性配置文件? – obsilp 2014-11-07 12:39:20

+0

我发现它(SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK,SDL_GL_CONTEXT_PROFILE_COMPATIBILITY)。但我仍然得到错误。 – obsilp 2014-11-07 12:41:27

回答

1

问题是我使用的是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);