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).
This commit is contained in:
Sam Lantinga 2017-12-12 16:34:16 -08:00
parent 0597bf6e99
commit 87894224b6
1 changed files with 11 additions and 14 deletions

View File

@ -1248,7 +1248,7 @@ UpdateLogicalSize(SDL_Renderer *renderer)
SDL_Rect viewport; SDL_Rect viewport;
/* 0 is for letterbox, 1 is for overscan */ /* 0 is for letterbox, 1 is for overscan */
int scale_policy = 0; 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) { if (!renderer->logical_w || !renderer->logical_h) {
return 0; return 0;
@ -1257,21 +1257,18 @@ UpdateLogicalSize(SDL_Renderer *renderer)
return -1; return -1;
} }
if (!hint) { hint = SDL_GetHint(SDL_HINT_RENDER_LOGICAL_SIZE_MODE);
scale_policy = 0; if (hint && (*hint == '1' || SDL_strcasecmp(hint, "overscan") == 0)) {
} else if ( *hint == '1' || SDL_strcasecmp(hint, "overscan") == 0) { SDL_bool overscan_supported = SDL_TRUE;
/* Unfortunately, Direct3D 9 does't support negative viewport numbers /* Unfortunately, Direct3D 9 doesn't support negative viewport numbers
which the main overscan implementation relies on. which the overscan implementation relies on.
D3D11 does support negative values and uses a different id string
so overscan will work for D3D11.
*/ */
if(SDL_strcasecmp("direct3d", SDL_GetCurrentVideoDriver())) { if (SDL_strcasecmp(SDL_GetCurrentVideoDriver(), "direct3d") == 0) {
scale_policy = 0; overscan_supported = SDL_FALSE;
} else { }
if (overscan_supported) {
scale_policy = 1; scale_policy = 1;
} }
} else {
scale_policy = 0;
} }
want_aspect = (float)renderer->logical_w / renderer->logical_h; want_aspect = (float)renderer->logical_w / renderer->logical_h;