summaryrefslogtreecommitdiff
path: root/src/utils/sdlhelper.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/utils/sdlhelper.cpp')
-rw-r--r--src/utils/sdlhelper.cpp38
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