summaryrefslogtreecommitdiff
path: root/src/utils/sdl2helper.cpp
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2014-07-10 21:15:55 +0300
committerAndrei Karas <akaras@inbox.ru>2014-07-10 21:15:55 +0300
commit4a21c51e2183c41079342a20239cb8d10f8f2e0c (patch)
tree235123f5c01824f04576b9b823e0b479cfab050d /src/utils/sdl2helper.cpp
parent2c2d6c379cf994a61491983780edd3ab9852eaf4 (diff)
downloadmv-4a21c51e2183c41079342a20239cb8d10f8f2e0c.tar.gz
mv-4a21c51e2183c41079342a20239cb8d10f8f2e0c.tar.bz2
mv-4a21c51e2183c41079342a20239cb8d10f8f2e0c.tar.xz
mv-4a21c51e2183c41079342a20239cb8d10f8f2e0c.zip
In OpenGL context creation add support for compatability context.
Diffstat (limited to 'src/utils/sdl2helper.cpp')
-rw-r--r--src/utils/sdl2helper.cpp41
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;
}