From 87894224b6456f95d33d93dd9c030fa010f2ffe5 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Tue, 12 Dec 2017 16:34:16 -0800 Subject: [PATCH] Fixed bug 3981 - Inverted logic bug in SDL_renderer "overscan" feature Eric wing There is a tiny bug in the new overscan code for the SDL_renderer. In SDL_renderer.c, line 1265, the if check for SDL_strcasecmp with "direct3d" needs to be inverted. Instead of: if(SDL_strcasecmp("direct3d", SDL_GetCurrentVideoDriver())) { It should be: if(0 == SDL_strcasecmp("direct3d", SDL_GetCurrentVideoDriver())) { This bug causes the "overscan" mode to pretty much be completely ignored in all cases and all things remain letterboxed (as before the feature). --- src/render/SDL_render.c | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/src/render/SDL_render.c b/src/render/SDL_render.c index ef1c4c3f65339..9fdc6cd10b92c 100644 --- a/src/render/SDL_render.c +++ b/src/render/SDL_render.c @@ -1248,7 +1248,7 @@ UpdateLogicalSize(SDL_Renderer *renderer) SDL_Rect viewport; /* 0 is for letterbox, 1 is for overscan */ int scale_policy = 0; - const char *hint = SDL_GetHint(SDL_HINT_RENDER_LOGICAL_SIZE_MODE); + const char *hint; if (!renderer->logical_w || !renderer->logical_h) { return 0; @@ -1257,23 +1257,20 @@ UpdateLogicalSize(SDL_Renderer *renderer) return -1; } - if (!hint) { - scale_policy = 0; - } else if ( *hint == '1' || SDL_strcasecmp(hint, "overscan") == 0) { - /* Unfortunately, Direct3D 9 does't support negative viewport numbers - which the main overscan implementation relies on. - D3D11 does support negative values and uses a different id string - so overscan will work for D3D11. + hint = SDL_GetHint(SDL_HINT_RENDER_LOGICAL_SIZE_MODE); + if (hint && (*hint == '1' || SDL_strcasecmp(hint, "overscan") == 0)) { + SDL_bool overscan_supported = SDL_TRUE; + /* Unfortunately, Direct3D 9 doesn't support negative viewport numbers + which the overscan implementation relies on. */ - if(SDL_strcasecmp("direct3d", SDL_GetCurrentVideoDriver())) { - scale_policy = 0; - } else { + if (SDL_strcasecmp(SDL_GetCurrentVideoDriver(), "direct3d") == 0) { + overscan_supported = SDL_FALSE; + } + if (overscan_supported) { scale_policy = 1; } - } else { - scale_policy = 0; } - + want_aspect = (float)renderer->logical_w / renderer->logical_h; real_aspect = (float)w / h;