sdlayer: Clean up creation of SDL_Renderer and provide information about the process to the log.

git-svn-id: https://svn.eduke32.com/eduke32@5759 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
hendricks266 2016-05-29 21:11:21 +00:00
parent 3719146448
commit 128719189f
2 changed files with 49 additions and 39 deletions

View file

@ -73,12 +73,6 @@ int32_t SDL_WaitEventTimeout(SDL_Event *event, int32_t timeout);
destroy_window_resources(); \ destroy_window_resources(); \
return -1; \ return -1; \
} }
#define SDL2_VIDEO_FALLBACK(XX) \
{ \
initprintf("Falling back to SDL_GetWindowSurface: " XX " failed: %s\n", SDL_GetError()); \
}
#define SDL2_RENDERER_DESTROY(XX) SDL_DestroyRenderer(XX), XX = NULL
#endif #endif
static inline void idle_waitevent_timeout(uint32_t timeout) static inline void idle_waitevent_timeout(uint32_t timeout)

View file

@ -1500,6 +1500,53 @@ void setrefreshrate(void)
} }
} }
static void sdl_trycreaterenderer_fail(char const * const failurepoint)
{
initprintf("Falling back to SDL_GetWindowSurface: %s failed: %s\n", failurepoint, SDL_GetError());
SDL_DestroyRenderer(sdl_renderer);
sdl_renderer = NULL;
}
static void sdl_trycreaterenderer(int32_t const x, int32_t const y)
{
sdl_renderer = SDL_CreateRenderer(sdl_window, -1, 0);
if (!sdl_renderer)
{
sdl_trycreaterenderer_fail("SDL_CreateRenderer");
return;
}
SDL_RendererInfo sdl_rendererinfo;
SDL_GetRendererInfo(sdl_renderer, &sdl_rendererinfo);
if (sdl_rendererinfo.flags & SDL_RENDERER_SOFTWARE) // this would be useless
{
initprintf("Falling back to SDL_GetWindowSurface: software SDL_Renderer \"%s\" provides no benefit.\n", sdl_rendererinfo.name);
SDL_DestroyRenderer(sdl_renderer);
sdl_renderer = NULL;
return;
}
initprintf("Trying SDL_Renderer \"%s\"\n", sdl_rendererinfo.name);
sdl_texture = SDL_CreateTexture(sdl_renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_STATIC, x, y);
if (!sdl_texture)
{
sdl_trycreaterenderer_fail("SDL_CreateTexture");
return;
}
sdl_surface = SDL_CreateRGBSurface(0, x, y, 32, 0, 0, 0, 0);
if (!sdl_surface)
{
SDL_DestroyTexture(sdl_texture);
sdl_texture = NULL;
sdl_trycreaterenderer_fail("SDL_CreateRGBSurface");
return;
}
}
int32_t setvideomode(int32_t x, int32_t y, int32_t c, int32_t fs) int32_t setvideomode(int32_t x, int32_t y, int32_t c, int32_t fs)
{ {
int32_t regrab = 0, ret; int32_t regrab = 0, ret;
@ -1588,38 +1635,7 @@ int32_t setvideomode(int32_t x, int32_t y, int32_t c, int32_t fs)
setrefreshrate(); setrefreshrate();
sdl_renderer = SDL_CreateRenderer(sdl_window, -1, 0); sdl_trycreaterenderer(x, y);
if (!sdl_renderer)
SDL2_VIDEO_FALLBACK("SDL_CreateRenderer")
else
{
SDL_RendererInfo sdl_rendererinfo;
SDL_GetRendererInfo(sdl_renderer, &sdl_rendererinfo);
if (sdl_rendererinfo.flags & SDL_RENDERER_SOFTWARE) // this would be useless
SDL2_RENDERER_DESTROY(sdl_renderer);
else
{
sdl_texture = SDL_CreateTexture(sdl_renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_STATIC, x, y);
if (!sdl_texture)
{
SDL2_VIDEO_FALLBACK("SDL_CreateTexture");
SDL2_RENDERER_DESTROY(sdl_renderer);
}
}
if (sdl_texture)
{
sdl_surface = SDL_CreateRGBSurface(0, x, y, 32, 0, 0, 0, 0);
if (!sdl_surface)
{
SDL2_VIDEO_FALLBACK("SDL_CreateRGBSurface");
SDL_DestroyTexture(sdl_texture);
sdl_texture = NULL;
SDL2_RENDERER_DESTROY(sdl_renderer);
}
}
}
if (!sdl_surface) if (!sdl_surface)
{ {