| @@ -432,13 +432,23 @@ _mesa_meta_begin(GLcontext *ctx, GLbitfield state) | |||
| } | |||
| if (state & META_VIEWPORT) { | |||
| /* save viewport state */ | |||
| save->ViewportX = ctx->Viewport.X; | |||
| save->ViewportY = ctx->Viewport.Y; | |||
| save->ViewportW = ctx->Viewport.Width; | |||
| save->ViewportH = ctx->Viewport.Height; | |||
| _mesa_Viewport(0, 0, ctx->DrawBuffer->Width, ctx->DrawBuffer->Height); | |||
| /* set viewport to match window size */ | |||
| if (ctx->Viewport.X != 0 || | |||
| ctx->Viewport.Y != 0 || | |||
| ctx->Viewport.Width != ctx->DrawBuffer->Width || | |||
| ctx->Viewport.Height != ctx->DrawBuffer->Height) { | |||
| _mesa_set_viewport(ctx, 0, 0, | |||
| ctx->DrawBuffer->Width, ctx->DrawBuffer->Height); | |||
| } | |||
| /* save depth range state */ | |||
| save->DepthNear = ctx->Viewport.Near; | |||
| save->DepthFar = ctx->Viewport.Far; | |||
| /* set depth range to default */ | |||
| _mesa_DepthRange(0.0, 1.0); | |||
| } | |||
| @@ -642,8 +652,13 @@ _mesa_meta_end(GLcontext *ctx) | |||
| } | |||
| if (state & META_VIEWPORT) { | |||
| _mesa_Viewport(save->ViewportX, save->ViewportY, | |||
| save->ViewportW, save->ViewportH); | |||
| if (save->ViewportX != ctx->Viewport.X || | |||
| save->ViewportY != ctx->Viewport.Y || | |||
| save->ViewportW != ctx->Viewport.Width || | |||
| save->ViewportH != ctx->Viewport.Height) { | |||
| _mesa_set_viewport(ctx, save->ViewportX, save->ViewportY, | |||
| save->ViewportW, save->ViewportH); | |||
| } | |||
| _mesa_DepthRange(save->DepthNear, save->DepthFar); | |||
| } | |||