|
@@ -1154,7 +1154,19 @@ UpdateLogicalSize(SDL_Renderer *renderer)
|
|
|
/* Clear the scale because we're setting viewport in output coordinates */
|
|
|
SDL_RenderSetScale(renderer, 1.0f, 1.0f);
|
|
|
|
|
|
- if (SDL_fabs(want_aspect-real_aspect) < 0.0001) {
|
|
|
+ if (renderer->integer_scale) {
|
|
|
+ if (want_aspect > real_aspect) {
|
|
|
+ scale = w / renderer->logical_w;
|
|
|
+ } else {
|
|
|
+ scale = h / renderer->logical_h;
|
|
|
+ }
|
|
|
+ viewport.w = (int)SDL_ceil(renderer->logical_w * scale);
|
|
|
+ viewport.x = (w - viewport.w) / 2;
|
|
|
+ viewport.h = (int)SDL_ceil(renderer->logical_h * scale);
|
|
|
+ viewport.y = (h - viewport.h) / 2;
|
|
|
+
|
|
|
+ SDL_RenderSetViewport(renderer, &viewport);
|
|
|
+ } else if (SDL_fabs(want_aspect-real_aspect) < 0.0001) {
|
|
|
/* The aspect ratios are the same, just scale appropriately */
|
|
|
scale = (float)w / renderer->logical_w;
|
|
|
SDL_RenderSetViewport(renderer, NULL);
|
|
@@ -1215,6 +1227,24 @@ SDL_RenderGetLogicalSize(SDL_Renderer * renderer, int *w, int *h)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+int
|
|
|
+SDL_RenderSetIntegerScale(SDL_Renderer * renderer, SDL_bool enable)
|
|
|
+{
|
|
|
+ CHECK_RENDERER_MAGIC(renderer, -1);
|
|
|
+
|
|
|
+ renderer->integer_scale = enable;
|
|
|
+
|
|
|
+ return UpdateLogicalSize(renderer);
|
|
|
+}
|
|
|
+
|
|
|
+SDL_bool
|
|
|
+SDLCALL SDL_RenderGetIntegerScale(SDL_Renderer * renderer)
|
|
|
+{
|
|
|
+ CHECK_RENDERER_MAGIC(renderer, SDL_FALSE);
|
|
|
+
|
|
|
+ return renderer->integer_scale;
|
|
|
+}
|
|
|
+
|
|
|
int
|
|
|
SDL_RenderSetViewport(SDL_Renderer * renderer, const SDL_Rect * rect)
|
|
|
{
|