Fallback to software if hardware is not available
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -18,6 +18,7 @@ namespace lime {
|
||||
|
||||
virtual void Flip ();
|
||||
virtual value Lock ();
|
||||
virtual const char* Type ();
|
||||
virtual void Unlock ();
|
||||
|
||||
SDL_Renderer* sdlRenderer;
|
||||
|
||||
Reference in New Issue
Block a user