Fallback to software if hardware is not available

This commit is contained in:
Joshua Granick
2015-07-23 08:09:30 -07:00
parent abc83da97b
commit 861c0fe63b
5 changed files with 62 additions and 10 deletions

View File

@@ -16,6 +16,7 @@ namespace lime {
virtual void Flip () = 0;
virtual value Lock () = 0;
virtual const char* Type () = 0;
virtual void Unlock () = 0;
Window* currentWindow;

View File

@@ -868,6 +868,14 @@ namespace lime {
}
value lime_renderer_get_type (value renderer) {
Renderer* targetRenderer = (Renderer*)(intptr_t)val_float (renderer);
return alloc_string (targetRenderer->Type ());
}
value lime_renderer_lock (value renderer) {
return ((Renderer*)(intptr_t)val_float (renderer))->Lock ();
@@ -1199,6 +1207,7 @@ namespace lime {
DEFINE_PRIM (lime_png_decode_file, 2);
DEFINE_PRIM (lime_renderer_create, 1);
DEFINE_PRIM (lime_renderer_flip, 1);
DEFINE_PRIM (lime_renderer_get_type, 1);
DEFINE_PRIM (lime_renderer_lock, 1);
DEFINE_PRIM (lime_renderer_unlock, 1);
DEFINE_PRIM (lime_render_event_manager_register, 2);

View File

@@ -31,6 +31,15 @@ namespace lime {
sdlRenderer = SDL_CreateRenderer (sdlWindow, -1, sdlFlags);
if (!sdlRenderer && (sdlFlags & SDL_RENDERER_ACCELERATED)) {
sdlFlags &= ~SDL_RENDERER_ACCELERATED;
sdlFlags |= SDL_RENDERER_SOFTWARE;
sdlRenderer = SDL_CreateRenderer (sdlWindow, -1, sdlFlags);
}
if (!sdlRenderer) {
printf ("Could not create SDL renderer: %s.\n", SDL_GetError ());
@@ -95,6 +104,30 @@ namespace lime {
}
const char* SDLRenderer::Type () {
if (sdlRenderer) {
SDL_RendererInfo info;
SDL_GetRendererInfo (sdlRenderer, &info);
if (info.flags & SDL_RENDERER_SOFTWARE) {
return "software";
} else {
return "opengl";
}
}
return "none";
}
void SDLRenderer::Unlock () {
if (sdlTexture) {

View File

@@ -18,6 +18,7 @@ namespace lime {
virtual void Flip ();
virtual value Lock ();
virtual const char* Type ();
virtual void Unlock ();
SDL_Renderer* sdlRenderer;