diff options
author | Andrei Karas <akaras@inbox.ru> | 2014-07-10 21:15:55 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2014-07-10 21:15:55 +0300 |
commit | 4a21c51e2183c41079342a20239cb8d10f8f2e0c (patch) | |
tree | 235123f5c01824f04576b9b823e0b479cfab050d /src/utils/sdl2helper.cpp | |
parent | 2c2d6c379cf994a61491983780edd3ab9852eaf4 (diff) | |
download | manaverse-4a21c51e2183c41079342a20239cb8d10f8f2e0c.tar.gz manaverse-4a21c51e2183c41079342a20239cb8d10f8f2e0c.tar.bz2 manaverse-4a21c51e2183c41079342a20239cb8d10f8f2e0c.tar.xz manaverse-4a21c51e2183c41079342a20239cb8d10f8f2e0c.zip |
In OpenGL context creation add support for compatability context.
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; } |