From 9c25859c8cb955c83a4ca511e18b1cb3625a6e3a Mon Sep 17 00:00:00 2001 From: Joshua Granick Date: Fri, 16 Oct 2015 10:45:53 -0700 Subject: [PATCH] Improve GL version check --- project/src/backend/sdl/SDLRenderer.cpp | 62 +++++++++++++++++++------ 1 file changed, 47 insertions(+), 15 deletions(-) diff --git a/project/src/backend/sdl/SDLRenderer.cpp b/project/src/backend/sdl/SDLRenderer.cpp index 554a70f32..8b72ee02b 100644 --- a/project/src/backend/sdl/SDLRenderer.cpp +++ b/project/src/backend/sdl/SDLRenderer.cpp @@ -12,21 +12,14 @@ namespace lime { currentWindow = window; sdlWindow = ((SDLWindow*)window)->sdlWindow; sdlTexture = 0; - - context = SDL_GL_GetCurrentContext (); - - OpenGLBindings::Init (); + context = 0; width = 0; height = 0; int sdlFlags = 0; - if (context && window->flags & WINDOW_FLAG_HARDWARE) { - - const char* version = (const char*)glGetString (GL_VERSION); - - // TODO: Check for GLES or GL2 and above + if (window->flags & WINDOW_FLAG_HARDWARE) { sdlFlags |= SDL_RENDERER_ACCELERATED; @@ -44,14 +37,53 @@ namespace lime { sdlRenderer = SDL_CreateRenderer (sdlWindow, -1, sdlFlags); - if (!sdlRenderer && (sdlFlags & SDL_RENDERER_ACCELERATED)) { + if (sdlFlags & SDL_RENDERER_ACCELERATED) { - sdlFlags &= ~SDL_RENDERER_ACCELERATED; - sdlFlags &= ~SDL_RENDERER_PRESENTVSYNC; + if (sdlRenderer) { + + 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; - - sdlRenderer = SDL_CreateRenderer (sdlWindow, -1, sdlFlags); + if (!sdlRenderer) { + + sdlFlags &= ~SDL_RENDERER_ACCELERATED; + sdlFlags &= ~SDL_RENDERER_PRESENTVSYNC; + + sdlFlags |= SDL_RENDERER_SOFTWARE; + + sdlRenderer = SDL_CreateRenderer (sdlWindow, -1, sdlFlags); + + } }