metal: clamp scissor rect to be within the active RT

This commit is contained in:
Alex Szpakowski
2021-03-30 19:27:52 -03:00
parent aad0810e11
commit 2064c140ac
+8 -1
View File
@@ -597,12 +597,19 @@ void Graphics::applyRenderState(id<MTLRenderCommandEncoder> encoder, const Verte
if (state.scissor)
{
// TODO: clamping
double dpiscale = getCurrentDPIScale();
rect.x = (NSUInteger)(state.scissorRect.x*dpiscale);
rect.y = (NSUInteger)(state.scissorRect.y*dpiscale);
rect.width = (NSUInteger)(state.scissorRect.w*dpiscale);
rect.height = (NSUInteger)(state.scissorRect.h*dpiscale);
if (rtw > 0 && (int)rect.x >= rtw)
rect.x = rtw - 1;
if (rth > 0 && (int)rect.y >= rth)
rect.y = rth - 1;
rect.width = std::min(rect.width, rtw - rect.x);
rect.height = std::min(rect.height, rth - rect.y);
}
[encoder setScissorRect:rect];