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).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
diff --git a/src/render/SDL_render.c b/src/render/SDL_render.c
index ef1c4c3..9fdc6cd 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;