use inverted Y coordinate for choosing dither value (conformance fixes)
authorBrian Paul <brian.paul@tungstengraphics.com>
Wed, 13 Dec 2000 16:24:39 +0000 (16:24 +0000)
committerBrian Paul <brian.paul@tungstengraphics.com>
Wed, 13 Dec 2000 16:24:39 +0000 (16:24 +0000)
src/mesa/drivers/x11/xm_line.c
src/mesa/drivers/x11/xm_tri.c

index 881e219713f8c48ba73348a8f89b83c217231c8b..a759d376bb4ef94d49bf571af42943c2634837bc 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: xm_line.c,v 1.12 2000/11/22 07:32:18 joukj Exp $ */
+/* $Id: xm_line.c,v 1.13 2000/12/13 16:24:40 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -54,6 +54,8 @@
 /*
  * Render an array of points into a pixmap, any pixel format.
  */
+#if 000
+/* XXX don't use this, it doesn't dither correctly */
 static void draw_points_ANY_pixmap( GLcontext *ctx, const SWvertex *vert )
 {
    XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
@@ -82,7 +84,7 @@ static void draw_points_ANY_pixmap( GLcontext *ctx, const SWvertex *vert )
       XMesaDrawPoint( dpy, buffer, gc, x, y);
    }
 }
-
+#endif
 
 
 /* Override the swrast point-selection function.  Try to use one of
@@ -91,6 +93,7 @@ static void draw_points_ANY_pixmap( GLcontext *ctx, const SWvertex *vert )
  */
 void xmesa_choose_point( GLcontext *ctx )
 {
+#if 0
    XMesaContext xmesa = (XMesaContext) ctx->DriverCtx;
    SWcontext *swrast = SWRAST_CONTEXT(ctx);
 
@@ -104,6 +107,9 @@ void xmesa_choose_point( GLcontext *ctx )
    else {
       _swrast_choose_point( ctx );
    }
+#else
+   _swrast_choose_point( ctx );
+#endif
 }
 
 
index 97235c0b27ae4745a9df282e042f0571c78280ab..09f1f7ce1c18972913124ebff522d18d0bcafb03 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: xm_tri.c,v 1.13 2000/11/24 10:25:09 keithw Exp $ */
+/* $Id: xm_tri.c,v 1.14 2000/12/13 16:24:39 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -277,11 +277,12 @@ static void smooth_DITHER_5R6G5B_z_triangle( GLcontext *ctx,
 #define INNER_LOOP( LEFT, RIGHT, Y )                                   \
 {                                                                      \
    GLint i, len = RIGHT-LEFT;                                          \
+   GLint yy = FLIP(xmesa->xm_buffer, Y);                               \
    (void) fffog;                                                       \
    for (i=0;i<len;i++) {                                               \
       GLdepth z = FixedToDepth(ffz);                                   \
       if (z < zRow[i]) {                                               \
-         PACK_TRUEDITHER(pRow[i], LEFT+i, Y, FixedToInt(ffr),          \
+         PACK_TRUEDITHER(pRow[i], LEFT+i, yy, FixedToInt(ffr),         \
                         FixedToInt(ffg), FixedToInt(ffb) );            \
          zRow[i] = z;                                                  \
       }                                                                        \
@@ -655,11 +656,12 @@ static void flat_DITHER_5R6G5B_z_triangle( GLcontext *ctx,
 #define INNER_LOOP( LEFT, RIGHT, Y )                           \
 {                                                              \
    GLint i, len = RIGHT-LEFT;                                  \
-   (void) fffog;                                                       \
+   GLint yy = FLIP(xmesa->xm_buffer, Y);                       \
+   (void) fffog;                                               \
    for (i=0;i<len;i++) {                                       \
       DEPTH_TYPE z = FixedToDepth(ffz);                                \
       if (z < zRow[i]) {                                       \
-        PACK_TRUEDITHER(pRow[i], LEFT+i, Y, color[RCOMP],      \
+        PACK_TRUEDITHER(pRow[i], LEFT+i, yy, color[RCOMP],     \
                         color[GCOMP], color[BCOMP]);           \
          zRow[i] = z;                                          \
       }                                                                \
@@ -687,19 +689,19 @@ static void flat_DITHER8_z_triangle( GLcontext *ctx,
 #define SETUP_CODE     \
    FLAT_DITHER_SETUP( v0->color[0], v0->color[1], v0->color[2] );
 
-#define INNER_LOOP( LEFT, RIGHT, Y )                           \
-{                                                              \
-   GLint i, xx = LEFT, len = RIGHT-LEFT;                       \
-   FLAT_DITHER_ROW_SETUP(FLIP(xmesa->xm_buffer, Y));           \
-   (void) fffog;                                                       \
-   for (i=0;i<len;i++,xx++) {                                  \
-      GLdepth z = FixedToDepth(ffz);                           \
-      if (z < zRow[i]) {                                       \
-        pRow[i] = (PIXEL_TYPE) FLAT_DITHER(xx);                \
-         zRow[i] = z;                                          \
-      }                                                                \
-      ffz += fdzdx;                                            \
-   }                                                           \
+#define INNER_LOOP( LEFT, RIGHT, Y )                                   \
+{                                                                      \
+   GLint i, xx = LEFT, yy = FLIP(xmesa->xm_buffer,Y), len = RIGHT-LEFT;        \
+   FLAT_DITHER_ROW_SETUP(FLIP(xmesa->xm_buffer, yy));                  \
+   (void) fffog;                                                       \
+   for (i=0;i<len;i++,xx++) {                                          \
+      GLdepth z = FixedToDepth(ffz);                                   \
+      if (z < zRow[i]) {                                               \
+        pRow[i] = (PIXEL_TYPE) FLAT_DITHER(xx);                        \
+         zRow[i] = z;                                                  \
+      }                                                                        \
+      ffz += fdzdx;                                                    \
+   }                                                                   \
 }
 #include "swrast/s_tritemp.h"
 }
@@ -988,10 +990,10 @@ static void smooth_DITHER_5R6G5B_triangle( GLcontext *ctx,
 #define BYTES_PER_ROW (xmesa->xm_buffer->backimage->bytes_per_line)
 #define INNER_LOOP( LEFT, RIGHT, Y )                                   \
 {                                                                      \
-   GLint xx;                                                           \
+   GLint xx, yy = FLIP(xmesa->xm_buffer, Y);                           \
    PIXEL_TYPE *pixel = pRow;                                           \
    for (xx=LEFT;xx<RIGHT;xx++,pixel++) {                               \
-      PACK_TRUEDITHER(*pixel, xx, Y, FixedToInt(ffr),                  \
+      PACK_TRUEDITHER(*pixel, xx, yy, FixedToInt(ffr),                 \
                                 FixedToInt(ffg), FixedToInt(ffb) );    \
       ffr += fdrdx;  ffg += fdgdx;  ffb += fdbdx;                      \
    }                                                                   \
@@ -1286,10 +1288,10 @@ static void flat_DITHER_5R6G5B_triangle( GLcontext *ctx,
 #define BYTES_PER_ROW (xmesa->xm_buffer->backimage->bytes_per_line)
 #define INNER_LOOP( LEFT, RIGHT, Y )                   \
 {                                                      \
-   GLint xx;                                           \
+   GLint xx, yy = FLIP(xmesa->xm_buffer, Y);           \
    PIXEL_TYPE *pixel = pRow;                           \
    for (xx=LEFT;xx<RIGHT;xx++,pixel++) {               \
-      PACK_TRUEDITHER(*pixel, xx, Y, color[RCOMP],     \
+      PACK_TRUEDITHER(*pixel, xx, yy, color[RCOMP],    \
                      color[GCOMP], color[BCOMP]);      \
    }                                                   \
 }