Improve GL version check

This commit is contained in:
Joshua Granick
2015-10-16 10:45:53 -07:00
parent 611df0d86c
commit 9c25859c8c

View File

@@ -12,21 +12,14 @@ namespace lime {
currentWindow = window; currentWindow = window;
sdlWindow = ((SDLWindow*)window)->sdlWindow; sdlWindow = ((SDLWindow*)window)->sdlWindow;
sdlTexture = 0; sdlTexture = 0;
context = 0;
context = SDL_GL_GetCurrentContext ();
OpenGLBindings::Init ();
width = 0; width = 0;
height = 0; height = 0;
int sdlFlags = 0; int sdlFlags = 0;
if (context && window->flags & WINDOW_FLAG_HARDWARE) { if (window->flags & WINDOW_FLAG_HARDWARE) {
const char* version = (const char*)glGetString (GL_VERSION);
// TODO: Check for GLES or GL2 and above
sdlFlags |= SDL_RENDERER_ACCELERATED; sdlFlags |= SDL_RENDERER_ACCELERATED;
@@ -44,14 +37,53 @@ namespace lime {
sdlRenderer = SDL_CreateRenderer (sdlWindow, -1, sdlFlags); sdlRenderer = SDL_CreateRenderer (sdlWindow, -1, sdlFlags);
if (!sdlRenderer && (sdlFlags & SDL_RENDERER_ACCELERATED)) { if (sdlFlags & SDL_RENDERER_ACCELERATED) {
sdlFlags &= ~SDL_RENDERER_ACCELERATED; if (sdlRenderer) {
sdlFlags &= ~SDL_RENDERER_PRESENTVSYNC;
bool valid = false;
context = SDL_GL_GetCurrentContext ();
if (context) {
OpenGLBindings::Init ();
int version = 0;
glGetIntegerv (GL_MAJOR_VERSION, &version);
if (version == 0) {
version = (int)sscanf ((const char*)glGetString (GL_VERSION), "%f", &version);
}
if (version >= 2 || strstr ((const char*)glGetString (GL_VERSION), "OpenGL ES")) {
valid = true;
}
}
if (!valid) {
SDL_DestroyRenderer (sdlRenderer);
sdlRenderer = 0;
}
}
sdlFlags |= SDL_RENDERER_SOFTWARE; if (!sdlRenderer) {
sdlRenderer = SDL_CreateRenderer (sdlWindow, -1, sdlFlags); sdlFlags &= ~SDL_RENDERER_ACCELERATED;
sdlFlags &= ~SDL_RENDERER_PRESENTVSYNC;
sdlFlags |= SDL_RENDERER_SOFTWARE;
sdlRenderer = SDL_CreateRenderer (sdlWindow, -1, sdlFlags);
}
} }