diff --git a/src/render/metal/SDL_render_metal.m b/src/render/metal/SDL_render_metal.m index 8c2a26701e..dad5911139 100644 --- a/src/render/metal/SDL_render_metal.m +++ b/src/render/metal/SDL_render_metal.m @@ -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; } diff --git a/test/testautomation_render.c b/test/testautomation_render.c index c88a3df7ea..071ae5db16 100644 --- a/test/testautomation_render.c +++ b/test/testautomation_render.c @@ -1361,6 +1361,20 @@ static int SDLCALL render_testClipRect(void *arg) /* Check to see if final image matches. */ compare(referenceSurface, ALLOWABLE_ERROR_OPAQUE); + /* + * Verify that empty cliprect clips all drawing + */ + + /* Set the cliprect and do a fill operation */ + cliprect.h = 0; + CHECK_FUNC(SDL_SetRenderClipRect, (renderer, &cliprect)) + CHECK_FUNC(SDL_SetRenderDrawColor, (renderer, 255, 0, 0, SDL_ALPHA_OPAQUE)) + CHECK_FUNC(SDL_RenderFillRect, (renderer, NULL)) + CHECK_FUNC(SDL_SetRenderClipRect, (renderer, NULL)) + + /* Check to see if final image matches. */ + compare(referenceSurface, ALLOWABLE_ERROR_OPAQUE); + /* * Verify that clear ignores the cliprect */