2014-11-06 135 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);