Improve GL version check
This commit is contained in:
@@ -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);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user