diff options
| author | Brian Paul <brian.paul@tungstengraphics.com> | 2003-12-05 00:44:01 +0000 | 
|---|---|---|
| committer | Brian Paul <brian.paul@tungstengraphics.com> | 2003-12-05 00:44:01 +0000 | 
| commit | a6ad01c14e8b7d819783d81c1febfa8e72063bf3 (patch) | |
| tree | 375c1252106162279adb97aee86149b5ab21cc69 | |
| parent | 15f7f4e31f1a90d58a4e897299039c9fd39782f9 (diff) | |
Fix a front/back CopyPixels glitch.
| -rw-r--r-- | src/mesa/drivers/x11/xm_dd.c | 6 | ||||
| -rw-r--r-- | src/mesa/swrast/s_copypix.c | 36 | 
2 files changed, 32 insertions, 10 deletions
| diff --git a/src/mesa/drivers/x11/xm_dd.c b/src/mesa/drivers/x11/xm_dd.c index 58b0db1ed1..d1d0098302 100644 --- a/src/mesa/drivers/x11/xm_dd.c +++ b/src/mesa/drivers/x11/xm_dd.c @@ -930,7 +930,9 @@ xmesa_CopyPixels( GLcontext *ctx,     ASSERT(dpy);     ASSERT(gc); -   if (drawBuffer &&  /* buffer != 0 means it's a Window or Pixmap */ +   if (ctx->Color.DrawBuffer == GL_FRONT && +       ctx->Pixel.ReadBuffer == GL_FRONT && +       drawBuffer &&  /* buffer != 0 means it's a Window or Pixmap */         readBuffer &&         type == GL_COLOR &&         (swrast->_RasterMask & ~CLIP_BIT) == 0 && /* no blend, z-test, etc */ @@ -1120,7 +1122,7 @@ void xmesa_init_pointers( GLcontext *ctx )     ctx->Driver.DrawPixels = _swrast_DrawPixels;     ctx->Driver.CopyPixels = _swrast_CopyPixels;  #else -   ctx->Driver.CopyPixels = xmesa_CopyPixels; +   ctx->Driver.CopyPixels = /*_swrast_CopyPixels;*/xmesa_CopyPixels;     if (xmesa->xm_visual->undithered_pf == PF_8R8G8B &&         xmesa->xm_visual->dithered_pf == PF_8R8G8B) {        ctx->Driver.DrawPixels = xmesa_DrawPixels_8R8G8B; diff --git a/src/mesa/swrast/s_copypix.c b/src/mesa/swrast/s_copypix.c index 15cedb4c1d..0692adfbff 100644 --- a/src/mesa/swrast/s_copypix.c +++ b/src/mesa/swrast/s_copypix.c @@ -310,8 +310,13 @@ copy_rgba_pixels(GLcontext *ctx, GLint srcx, GLint srcy,        stepy = 1;     } -   overlapping = regions_overlap(srcx, srcy, destx, desty, width, height, -                                 ctx->Pixel.ZoomX, ctx->Pixel.ZoomY); +   if (ctx->DrawBuffer == ctx->ReadBuffer) { +      overlapping = regions_overlap(srcx, srcy, destx, desty, width, height, +                                    ctx->Pixel.ZoomX, ctx->Pixel.ZoomY); +   } +   else { +      overlapping = GL_FALSE; +   }     if (ctx->Depth.Test)        _swrast_span_default_z(ctx, &span); @@ -521,8 +526,13 @@ copy_ci_pixels( GLcontext *ctx, GLint srcx, GLint srcy,        stepy = 1;     } -   overlapping = regions_overlap(srcx, srcy, destx, desty, width, height, -                                 ctx->Pixel.ZoomX, ctx->Pixel.ZoomY); +   if (ctx->DrawBuffer == ctx->ReadBuffer) { +      overlapping = regions_overlap(srcx, srcy, destx, desty, width, height, +                                    ctx->Pixel.ZoomX, ctx->Pixel.ZoomY); +   } +   else { +      overlapping = GL_FALSE; +   }     if (ctx->Depth.Test)        _swrast_span_default_z(ctx, &span); @@ -636,8 +646,13 @@ copy_depth_pixels( GLcontext *ctx, GLint srcx, GLint srcy,        stepy = 1;     } -   overlapping = regions_overlap(srcx, srcy, destx, desty, width, height, -                                 ctx->Pixel.ZoomX, ctx->Pixel.ZoomY); +   if (ctx->DrawBuffer == ctx->ReadBuffer) { +      overlapping = regions_overlap(srcx, srcy, destx, desty, width, height, +                                    ctx->Pixel.ZoomX, ctx->Pixel.ZoomY); +   } +   else { +      overlapping = GL_FALSE; +   }     _swrast_span_default_color(ctx, &span);     if (ctx->Fog.Enabled) @@ -736,8 +751,13 @@ copy_stencil_pixels( GLcontext *ctx, GLint srcx, GLint srcy,        stepy = 1;     } -   overlapping = regions_overlap(srcx, srcy, destx, desty, width, height, -                                 ctx->Pixel.ZoomX, ctx->Pixel.ZoomY); +   if (ctx->DrawBuffer == ctx->ReadBuffer) { +      overlapping = regions_overlap(srcx, srcy, destx, desty, width, height, +                                    ctx->Pixel.ZoomX, ctx->Pixel.ZoomY); +   } +   else { +      overlapping = GL_FALSE; +   }     if (overlapping) {        GLint ssy = sy; | 
