summaryrefslogtreecommitdiff
path: root/src/utils/sdl2helper.cpp
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2014-06-23 23:18:36 +0300
committerAndrei Karas <akaras@inbox.ru>2014-06-24 00:38:16 +0300
commit34279cbb4ea6506c3d64a62e20cd97643999ce61 (patch)
tree834f737ba88af9b718ab2097e77f9953afcaa586 /src/utils/sdl2helper.cpp
parenta1521294fda5b8b5bba3e7b512573bfcbc4c7fbe (diff)
downloadmanaverse-34279cbb4ea6506c3d64a62e20cd97643999ce61.tar.gz
manaverse-34279cbb4ea6506c3d64a62e20cd97643999ce61.tar.bz2
manaverse-34279cbb4ea6506c3d64a62e20cd97643999ce61.tar.xz
manaverse-34279cbb4ea6506c3d64a62e20cd97643999ce61.zip
Add manual OpenGL context creation.
For SDL2 set attributes for context version. For SDL1.2 in X11 create own context. For SDL1.2 and other platforms not implimented for now. Also try fallback if need to older context versions.
Diffstat (limited to 'src/utils/sdl2helper.cpp')
-rw-r--r--src/utils/sdl2helper.cpp32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/utils/sdl2helper.cpp b/src/utils/sdl2helper.cpp
index 22c57116c..3b2b988a0 100644
--- a/src/utils/sdl2helper.cpp
+++ b/src/utils/sdl2helper.cpp
@@ -94,4 +94,36 @@ SDL_Thread *SDL::createThread(SDL_ThreadFunction fn,
return SDL_CreateThread(fn, name, data);
}
+void *SDL::createGLContext(SDL_Window *const window,
+ const int major,
+ const int minor)
+{
+ 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_FLAGS, SDL_GL_CONTEXT_DEBUG_FLAG);
+ SDL_ClearError();
+ void *context = SDL_GL_CreateContext(window);
+ if (SDL_GetError())
+ {
+ if (!context && (major > 3 || (major == 3 && minor > 3)))
+ {
+ logger->log("Try fallback to OpenGL 3.3 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())
+ {
+ 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);
+ }
+ }
+ }
+ return context;
+}
+
#endif // USE_SDL2