render: an empty clip rect should clip all drawing

Added a test to validate this and fixed the Metal renderer

Fixes https://github.com/libsdl-org/SDL/issues/15434
This commit is contained in:
Sam Lantinga
2026-05-29 13:44:46 -07:00
parent ed2c8036a7
commit e04bfb4c6e
2 changed files with 22 additions and 8 deletions

View File

@@ -1553,14 +1553,14 @@ static bool SetDrawState(SDL_Renderer *renderer, const SDL_RenderCommand *cmd, c
METAL_GetOutputSize(renderer, &output.w, &output.h);
}
if (SDL_GetRectIntersection(&output, &clip, &clip)) {
MTLScissorRect mtlrect;
mtlrect.x = clip.x;
mtlrect.y = clip.y;
mtlrect.width = clip.w;
mtlrect.height = clip.h;
[data.mtlcmdencoder setScissorRect:mtlrect];
}
SDL_GetRectIntersection(&output, &clip, &clip);
MTLScissorRect mtlrect;
mtlrect.x = clip.x;
mtlrect.y = clip.y;
mtlrect.width = clip.w;
mtlrect.height = clip.h;
[data.mtlcmdencoder setScissorRect:mtlrect];
statecache->cliprect_dirty = false;
}