_mesa_update_state(vmesa->glCtx);
viaValidateState(vmesa->glCtx);
+ ctx->Driver.Scissor(vmesa->glCtx,
+ vmesa->glCtx->Scissor.X,
+ vmesa->glCtx->Scissor.Y,
+ vmesa->glCtx->Scissor.Width,
+ vmesa->glCtx->Scissor.Height);
}
else {
_mesa_make_current(0,0);
b.y1 = pbox[i].y1 - vmesa->drawY;
b.y2 = pbox[i].y2 - vmesa->drawY;
- if (vmesa->glCtx->Scissor.Enabled &&
+ if (vmesa->scissor &&
!intersect_rect(&b, &b, &vmesa->scissorRect))
continue;
-
+
b.x1 += vmesa->drawXoff;
b.x2 += vmesa->drawXoff;
if (VIA_DEBUG)
fprintf(stderr, "%s %d,%d %dx%d, drawH %d\n", __FUNCTION__, x,y,w,h, vmesa->driDrawable->h);
- if (ctx->Scissor.Enabled) {
+ if (vmesa->scissor) {
VIA_FLUSH_DMA(vmesa); /* don't pipeline cliprect changes */
}
vmesa->scissorRect.x1 = x;
- vmesa->scissorRect.y1 = vmesa->driDrawable->h - (y + h);
+ vmesa->scissorRect.y1 = vmesa->driDrawable->h - y - h;
vmesa->scissorRect.x2 = x + w;
vmesa->scissorRect.y2 = vmesa->driDrawable->h - y;
+
if (VIA_DEBUG) fprintf(stderr, "%s out\n", __FUNCTION__);
}
switch (cap) {
case GL_SCISSOR_TEST:
VIA_FLUSH_DMA(vmesa);
+ vmesa->scissor = state;
break;
default:
break;