diff options
Diffstat (limited to 'src/utils/sdl2helper.cpp')
-rw-r--r-- | src/utils/sdl2helper.cpp | 41 |
1 files changed, 28 insertions, 13 deletions
diff --git a/src/utils/sdl2helper.cpp b/src/utils/sdl2helper.cpp index 07f8d965c..6de5ef357 100644 --- a/src/utils/sdl2helper.cpp +++ b/src/utils/sdl2helper.cpp @@ -96,33 +96,48 @@ SDL_Thread *SDL::createThread(SDL_ThreadFunction fn, void *SDL::createGLContext(SDL_Window *const window, const int major, - const int minor) + const int minor, + const int profile) { SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, major); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, minor); - SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, - SDL_GL_CONTEXT_PROFILE_CORE); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, profile); // SDL_GL_SetAttribute(SDL_GL_CONTEXT_FLAGS, SDL_GL_CONTEXT_DEBUG_FLAG); SDL_ClearError(); void *context = SDL_GL_CreateContext(window); - if (SDL_GetError()) + if (SDL_GetError() && (major > 3 || (major == 3 && minor > 3))) { - if (!context && (major > 3 || (major == 3 && minor > 3))) + logger->log("Try fallback to OpenGL 3.3 core context"); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 3); + SDL_ClearError(); + context = SDL_GL_CreateContext(window); + if (SDL_GetError() && profile == 0x01) { - logger->log("Try fallback to OpenGL 3.3 context"); + logger->log("Try fallback to OpenGL 3.3 compatibility context"); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 3); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, 0x02); SDL_ClearError(); context = SDL_GL_CreateContext(window); - if (SDL_GetError()) - { - logger->log("Try fallback to OpenGL 3.0 context"); - SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3); - SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0); - context = SDL_GL_CreateContext(window); - } } } + if (SDL_GetError() && (major > 3 || (major == 3 && minor > 0))) + { + logger->log("Try fallback to OpenGL 3.0 core context"); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, profile); + context = SDL_GL_CreateContext(window); + } + if (SDL_GetError() && (major > 2 || (major == 2 && minor > 1))) + { + logger->log("Try fallback to OpenGL 2.1 compatibility context"); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 1); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, 0x02); + context = SDL_GL_CreateContext(window); + } return context; } |