mirror of
https://github.com/libsdl-org/SDL.git
synced 2026-04-13 20:21:35 +02:00
Don't send any commands to the GPU while hidden
Previously we weren't doing drawing, but we were enqueuing viewport commands and so forth, which were causing GPU permission errors on iOS. We really don't want to be sending any work to the GPU when we're in the background.
(cherry picked from commit 57f3d2ea0a)
This commit is contained in:
@@ -320,6 +320,12 @@ static bool FlushRenderCommands(SDL_Renderer *renderer)
|
|||||||
|
|
||||||
DebugLogRenderCommands(renderer->render_commands);
|
DebugLogRenderCommands(renderer->render_commands);
|
||||||
|
|
||||||
|
#if DONT_DRAW_WHILE_HIDDEN
|
||||||
|
// Don't send commands to the GPU while we're hidden
|
||||||
|
if (renderer->hidden) {
|
||||||
|
result = true;
|
||||||
|
} else
|
||||||
|
#endif
|
||||||
result = renderer->RunCommandQueue(renderer, renderer->render_commands, renderer->vertex_data, renderer->vertex_data_used);
|
result = renderer->RunCommandQueue(renderer, renderer->render_commands, renderer->vertex_data, renderer->vertex_data_used);
|
||||||
|
|
||||||
// Move the whole render command queue to the unused pool so we can reuse them next time.
|
// Move the whole render command queue to the unused pool so we can reuse them next time.
|
||||||
@@ -3581,13 +3587,6 @@ bool SDL_RenderPoints(SDL_Renderer *renderer, const SDL_FPoint *points, int coun
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if DONT_DRAW_WHILE_HIDDEN
|
|
||||||
// Don't draw while we're hidden
|
|
||||||
if (renderer->hidden) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
const SDL_RenderViewState *view = renderer->view;
|
const SDL_RenderViewState *view = renderer->view;
|
||||||
if ((view->current_scale.x != 1.0f) || (view->current_scale.y != 1.0f)) {
|
if ((view->current_scale.x != 1.0f) || (view->current_scale.y != 1.0f)) {
|
||||||
result = RenderPointsWithRects(renderer, points, count);
|
result = RenderPointsWithRects(renderer, points, count);
|
||||||
@@ -3788,13 +3787,6 @@ bool SDL_RenderLines(SDL_Renderer *renderer, const SDL_FPoint *points, int count
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if DONT_DRAW_WHILE_HIDDEN
|
|
||||||
// Don't draw while we're hidden
|
|
||||||
if (renderer->hidden) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
SDL_RenderViewState *view = renderer->view;
|
SDL_RenderViewState *view = renderer->view;
|
||||||
const bool islogical = (view->logical_presentation_mode != SDL_LOGICAL_PRESENTATION_DISABLED);
|
const bool islogical = (view->logical_presentation_mode != SDL_LOGICAL_PRESENTATION_DISABLED);
|
||||||
|
|
||||||
@@ -3968,13 +3960,6 @@ bool SDL_RenderRects(SDL_Renderer *renderer, const SDL_FRect *rects, int count)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if DONT_DRAW_WHILE_HIDDEN
|
|
||||||
// Don't draw while we're hidden
|
|
||||||
if (renderer->hidden) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
for (i = 0; i < count; ++i) {
|
for (i = 0; i < count; ++i) {
|
||||||
if (!SDL_RenderRect(renderer, &rects[i])) {
|
if (!SDL_RenderRect(renderer, &rects[i])) {
|
||||||
return false;
|
return false;
|
||||||
@@ -4014,13 +3999,6 @@ bool SDL_RenderFillRects(SDL_Renderer *renderer, const SDL_FRect *rects, int cou
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if DONT_DRAW_WHILE_HIDDEN
|
|
||||||
// Don't draw while we're hidden
|
|
||||||
if (renderer->hidden) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
frects = SDL_small_alloc(SDL_FRect, count, &isstack);
|
frects = SDL_small_alloc(SDL_FRect, count, &isstack);
|
||||||
if (!frects) {
|
if (!frects) {
|
||||||
return false;
|
return false;
|
||||||
@@ -4111,13 +4089,6 @@ bool SDL_RenderTexture(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_F
|
|||||||
return SDL_SetError("Texture was not created with this renderer");
|
return SDL_SetError("Texture was not created with this renderer");
|
||||||
}
|
}
|
||||||
|
|
||||||
#if DONT_DRAW_WHILE_HIDDEN
|
|
||||||
// Don't draw while we're hidden
|
|
||||||
if (renderer->hidden) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
SDL_FRect real_srcrect;
|
SDL_FRect real_srcrect;
|
||||||
real_srcrect.x = 0.0f;
|
real_srcrect.x = 0.0f;
|
||||||
real_srcrect.y = 0.0f;
|
real_srcrect.y = 0.0f;
|
||||||
@@ -4165,13 +4136,6 @@ bool SDL_RenderTextureAffine(SDL_Renderer *renderer, SDL_Texture *texture,
|
|||||||
return SDL_SetError("Renderer does not support RenderCopyEx");
|
return SDL_SetError("Renderer does not support RenderCopyEx");
|
||||||
}
|
}
|
||||||
|
|
||||||
#if DONT_DRAW_WHILE_HIDDEN
|
|
||||||
// Don't draw while we're hidden
|
|
||||||
if (renderer->hidden) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
real_srcrect.x = 0.0f;
|
real_srcrect.x = 0.0f;
|
||||||
real_srcrect.y = 0.0f;
|
real_srcrect.y = 0.0f;
|
||||||
real_srcrect.w = (float)texture->w;
|
real_srcrect.w = (float)texture->w;
|
||||||
@@ -4292,13 +4256,6 @@ bool SDL_RenderTextureRotated(SDL_Renderer *renderer, SDL_Texture *texture,
|
|||||||
return SDL_SetError("Renderer does not support RenderCopyEx");
|
return SDL_SetError("Renderer does not support RenderCopyEx");
|
||||||
}
|
}
|
||||||
|
|
||||||
#if DONT_DRAW_WHILE_HIDDEN
|
|
||||||
// Don't draw while we're hidden
|
|
||||||
if (renderer->hidden) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
real_srcrect.x = 0.0f;
|
real_srcrect.x = 0.0f;
|
||||||
real_srcrect.y = 0.0f;
|
real_srcrect.y = 0.0f;
|
||||||
real_srcrect.w = (float)texture->w;
|
real_srcrect.w = (float)texture->w;
|
||||||
@@ -4553,13 +4510,6 @@ bool SDL_RenderTextureTiled(SDL_Renderer *renderer, SDL_Texture *texture, const
|
|||||||
return SDL_InvalidParamError("scale");
|
return SDL_InvalidParamError("scale");
|
||||||
}
|
}
|
||||||
|
|
||||||
#if DONT_DRAW_WHILE_HIDDEN
|
|
||||||
// Don't draw while we're hidden
|
|
||||||
if (renderer->hidden) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
real_srcrect.x = 0.0f;
|
real_srcrect.x = 0.0f;
|
||||||
real_srcrect.y = 0.0f;
|
real_srcrect.y = 0.0f;
|
||||||
real_srcrect.w = (float)texture->w;
|
real_srcrect.w = (float)texture->w;
|
||||||
@@ -5339,13 +5289,6 @@ bool SDL_RenderGeometryRaw(SDL_Renderer *renderer,
|
|||||||
return SDL_Unsupported();
|
return SDL_Unsupported();
|
||||||
}
|
}
|
||||||
|
|
||||||
#if DONT_DRAW_WHILE_HIDDEN
|
|
||||||
// Don't draw while we're hidden
|
|
||||||
if (renderer->hidden) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (num_vertices < 3) {
|
if (num_vertices < 3) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user