diff options
author | Andrei Karas <akaras@inbox.ru> | 2014-06-23 23:18:36 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2014-06-24 00:38:16 +0300 |
commit | 34279cbb4ea6506c3d64a62e20cd97643999ce61 (patch) | |
tree | 834f737ba88af9b718ab2097e77f9953afcaa586 /src/utils/sdlhelper.cpp | |
parent | a1521294fda5b8b5bba3e7b512573bfcbc4c7fbe (diff) | |
download | mv-34279cbb4ea6506c3d64a62e20cd97643999ce61.tar.gz mv-34279cbb4ea6506c3d64a62e20cd97643999ce61.tar.bz2 mv-34279cbb4ea6506c3d64a62e20cd97643999ce61.tar.xz mv-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/sdlhelper.cpp')
-rw-r--r-- | src/utils/sdlhelper.cpp | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/utils/sdlhelper.cpp b/src/utils/sdlhelper.cpp index 0f5d67a59..19cffa0a6 100644 --- a/src/utils/sdlhelper.cpp +++ b/src/utils/sdlhelper.cpp @@ -23,9 +23,14 @@ #include "utils/sdlhelper.h" #include "logger.h" +#include "main.h" #include "utils/stringutils.h" +#ifdef USE_X11 +#include "utils/glxhelper.h" +#endif // USE_X11 + #include <SDL_syswm.h> #include <SDL_video.h> @@ -111,4 +116,37 @@ SDL_Thread *SDL::createThread(int (SDLCALL *fn)(void *), return SDL_CreateThread(fn, data); } +#if defined(USE_X11) && defined(USE_OPENGL) +void *SDL::createGLContext(SDL_Surface *const window A_UNUSED, + const int major, + const int minor) +{ + SDL_SysWMinfo info; + SDL_VERSION(&info.version); + SDL_GetWMInfo(&info); + void *context = GlxHelper::createContext(info.info.x11.window, + info.info.x11.display, major, minor); + if (!context && (major > 3 || (major == 3 && minor > 3))) + { + logger->log("Try fallback to OpenGL 3.3 context"); + context = GlxHelper::createContext(info.info.x11.window, + info.info.x11.display, 3, 3); + if (!context) + { + logger->log("Try fallback to OpenGL 3.0 context"); + context = GlxHelper::createContext(info.info.x11.window, + info.info.x11.display, 3, 0); + } + } + return context; +} +#else +void *SDL::createGLContext(SDL_Surface *const window A_UNUSED, + const int major A_UNUSED, + const int minor A_UNUSED) +{ + return nullptr; +} +#endif + #endif // USE_SDL2 |