mirror of https://github.com/encounter/SDL.git
Merge commit '314bb5a1ed1a90276597b9aefef225a7c5027845' into main
This commit is contained in:
commit
21196f4237
|
@ -652,7 +652,7 @@ QueueCmdGeometry(SDL_Renderer *renderer, SDL_Texture *texture,
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int UpdateLogicalSize(SDL_Renderer *renderer);
|
static int UpdateLogicalSize(SDL_Renderer *renderer, SDL_bool flush_viewport_cmd);
|
||||||
|
|
||||||
int
|
int
|
||||||
SDL_GetNumRenderDrivers(void)
|
SDL_GetNumRenderDrivers(void)
|
||||||
|
@ -730,7 +730,14 @@ SDL_RendererEventWatch(void *userdata, SDL_Event *event)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (renderer->logical_w) {
|
if (renderer->logical_w) {
|
||||||
UpdateLogicalSize(renderer);
|
#if defined(__ANDROID__)
|
||||||
|
/* Don't immediatly flush because the app may be in
|
||||||
|
* background, and the egl context shouldn't be used. */
|
||||||
|
SDL_bool flush_viewport_cmd = SDL_FALSE;
|
||||||
|
#else
|
||||||
|
SDL_bool flush_viewport_cmd = SDL_TRUE;
|
||||||
|
#endif
|
||||||
|
UpdateLogicalSize(renderer, flush_viewport_cmd);
|
||||||
} else {
|
} else {
|
||||||
/* Window was resized, reset viewport */
|
/* Window was resized, reset viewport */
|
||||||
int w, h;
|
int w, h;
|
||||||
|
@ -746,7 +753,12 @@ SDL_RendererEventWatch(void *userdata, SDL_Event *event)
|
||||||
renderer->viewport.w = (double)w;
|
renderer->viewport.w = (double)w;
|
||||||
renderer->viewport.h = (double)h;
|
renderer->viewport.h = (double)h;
|
||||||
QueueCmdSetViewport(renderer);
|
QueueCmdSetViewport(renderer);
|
||||||
|
#if defined(__ANDROID__)
|
||||||
|
/* Don't immediatly flush because the app may be in
|
||||||
|
* background, and the egl context shouldn't be used. */
|
||||||
|
#else
|
||||||
FlushRenderCommandsIfNotBatching(renderer);
|
FlushRenderCommandsIfNotBatching(renderer);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if (saved_target) {
|
if (saved_target) {
|
||||||
|
@ -2272,7 +2284,7 @@ SDL_GetRenderTarget(SDL_Renderer *renderer)
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
UpdateLogicalSize(SDL_Renderer *renderer)
|
UpdateLogicalSize(SDL_Renderer *renderer, SDL_bool flush_viewport_cmd)
|
||||||
{
|
{
|
||||||
int w = 1, h = 1;
|
int w = 1, h = 1;
|
||||||
float want_aspect;
|
float want_aspect;
|
||||||
|
@ -2329,12 +2341,12 @@ UpdateLogicalSize(SDL_Renderer *renderer)
|
||||||
viewport.x = (w - viewport.w) / 2;
|
viewport.x = (w - viewport.w) / 2;
|
||||||
viewport.h = (int)SDL_floor(renderer->logical_h * scale);
|
viewport.h = (int)SDL_floor(renderer->logical_h * scale);
|
||||||
viewport.y = (h - viewport.h) / 2;
|
viewport.y = (h - viewport.h) / 2;
|
||||||
|
|
||||||
SDL_RenderSetViewport(renderer, &viewport);
|
|
||||||
} else if (SDL_fabs(want_aspect-real_aspect) < 0.0001) {
|
} else if (SDL_fabs(want_aspect-real_aspect) < 0.0001) {
|
||||||
/* The aspect ratios are the same, just scale appropriately */
|
/* The aspect ratios are the same, just scale appropriately */
|
||||||
scale = (float)w / renderer->logical_w;
|
scale = (float)w / renderer->logical_w;
|
||||||
SDL_RenderSetViewport(renderer, NULL);
|
|
||||||
|
SDL_zero(viewport);
|
||||||
|
SDL_GetRendererOutputSize(renderer, &viewport.w, &viewport.h);
|
||||||
} else if (want_aspect > real_aspect) {
|
} else if (want_aspect > real_aspect) {
|
||||||
if (scale_policy == 1) {
|
if (scale_policy == 1) {
|
||||||
/* We want a wider aspect ratio than is available -
|
/* We want a wider aspect ratio than is available -
|
||||||
|
@ -2346,7 +2358,6 @@ UpdateLogicalSize(SDL_Renderer *renderer)
|
||||||
viewport.h = h;
|
viewport.h = h;
|
||||||
viewport.w = (int)SDL_floor(renderer->logical_w * scale);
|
viewport.w = (int)SDL_floor(renderer->logical_w * scale);
|
||||||
viewport.x = (w - viewport.w) / 2;
|
viewport.x = (w - viewport.w) / 2;
|
||||||
SDL_RenderSetViewport(renderer, &viewport);
|
|
||||||
} else {
|
} else {
|
||||||
/* We want a wider aspect ratio than is available - letterbox it */
|
/* We want a wider aspect ratio than is available - letterbox it */
|
||||||
scale = (float)w / renderer->logical_w;
|
scale = (float)w / renderer->logical_w;
|
||||||
|
@ -2354,7 +2365,6 @@ UpdateLogicalSize(SDL_Renderer *renderer)
|
||||||
viewport.w = w;
|
viewport.w = w;
|
||||||
viewport.h = (int)SDL_floor(renderer->logical_h * scale);
|
viewport.h = (int)SDL_floor(renderer->logical_h * scale);
|
||||||
viewport.y = (h - viewport.h) / 2;
|
viewport.y = (h - viewport.h) / 2;
|
||||||
SDL_RenderSetViewport(renderer, &viewport);
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (scale_policy == 1) {
|
if (scale_policy == 1) {
|
||||||
|
@ -2367,7 +2377,6 @@ UpdateLogicalSize(SDL_Renderer *renderer)
|
||||||
viewport.w = w;
|
viewport.w = w;
|
||||||
viewport.h = (int)SDL_floor(renderer->logical_h * scale);
|
viewport.h = (int)SDL_floor(renderer->logical_h * scale);
|
||||||
viewport.y = (h - viewport.h) / 2;
|
viewport.y = (h - viewport.h) / 2;
|
||||||
SDL_RenderSetViewport(renderer, &viewport);
|
|
||||||
} else {
|
} else {
|
||||||
/* We want a narrower aspect ratio than is available - use side-bars */
|
/* We want a narrower aspect ratio than is available - use side-bars */
|
||||||
scale = (float)h / renderer->logical_h;
|
scale = (float)h / renderer->logical_h;
|
||||||
|
@ -2375,10 +2384,19 @@ UpdateLogicalSize(SDL_Renderer *renderer)
|
||||||
viewport.h = h;
|
viewport.h = h;
|
||||||
viewport.w = (int)SDL_floor(renderer->logical_w * scale);
|
viewport.w = (int)SDL_floor(renderer->logical_w * scale);
|
||||||
viewport.x = (w - viewport.w) / 2;
|
viewport.x = (w - viewport.w) / 2;
|
||||||
SDL_RenderSetViewport(renderer, &viewport);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Set the new viewport */
|
||||||
|
renderer->viewport.x = (double)viewport.x * renderer->scale.x;
|
||||||
|
renderer->viewport.y = (double)viewport.y * renderer->scale.y;
|
||||||
|
renderer->viewport.w = (double)viewport.w * renderer->scale.x;
|
||||||
|
renderer->viewport.h = (double)viewport.h * renderer->scale.y;
|
||||||
|
QueueCmdSetViewport(renderer);
|
||||||
|
if (flush_viewport_cmd) {
|
||||||
|
FlushRenderCommandsIfNotBatching(renderer);
|
||||||
|
}
|
||||||
|
|
||||||
/* Set the new scale */
|
/* Set the new scale */
|
||||||
SDL_RenderSetScale(renderer, scale, scale);
|
SDL_RenderSetScale(renderer, scale, scale);
|
||||||
|
|
||||||
|
@ -2402,7 +2420,7 @@ SDL_RenderSetLogicalSize(SDL_Renderer * renderer, int w, int h)
|
||||||
renderer->logical_w = w;
|
renderer->logical_w = w;
|
||||||
renderer->logical_h = h;
|
renderer->logical_h = h;
|
||||||
|
|
||||||
return UpdateLogicalSize(renderer);
|
return UpdateLogicalSize(renderer, SDL_TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -2425,7 +2443,7 @@ SDL_RenderSetIntegerScale(SDL_Renderer * renderer, SDL_bool enable)
|
||||||
|
|
||||||
renderer->integer_scale = enable;
|
renderer->integer_scale = enable;
|
||||||
|
|
||||||
return UpdateLogicalSize(renderer);
|
return UpdateLogicalSize(renderer, SDL_TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
SDL_bool
|
SDL_bool
|
||||||
|
|
Loading…
Reference in New Issue