sample plane equations at fragment centers, not lower-left corner
authorBrian Paul <brian.paul@tungstengraphics.com>
Mon, 7 May 2001 16:01:59 +0000 (16:01 +0000)
committerBrian Paul <brian.paul@tungstengraphics.com>
Mon, 7 May 2001 16:01:59 +0000 (16:01 +0000)
src/mesa/swrast/s_aatritemp.h

index ae5abfc..4b92165 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: s_aatritemp.h,v 1.10 2001/05/03 22:13:32 brianp Exp $ */
+/* $Id: s_aatritemp.h,v 1.11 2001/05/07 16:01:59 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
          ix = startX;
          count = 0;
          while (coverage > 0.0F) {
+            /* (cx,cy) = center of fragment */
+            const GLfloat cx = ix + 0.5F, cy = iy + 0.5F;
 #ifdef DO_Z
-            z[count] = (GLdepth) solve_plane(ix, iy, zPlane);
-           fog[count] = solve_plane(ix, iy, fogPlane);
+            z[count] = (GLdepth) solve_plane(cx, cy, zPlane);
+           fog[count] = solve_plane(cx, cy, fogPlane);
 #endif
 #ifdef DO_RGBA
-            rgba[count][RCOMP] = solve_plane_chan(ix, iy, rPlane);
-            rgba[count][GCOMP] = solve_plane_chan(ix, iy, gPlane);
-            rgba[count][BCOMP] = solve_plane_chan(ix, iy, bPlane);
-            rgba[count][ACOMP] = (GLchan) (solve_plane_chan(ix, iy, aPlane) * coverage);
+            rgba[count][RCOMP] = solve_plane_chan(cx, cy, rPlane);
+            rgba[count][GCOMP] = solve_plane_chan(cx, cy, gPlane);
+            rgba[count][BCOMP] = solve_plane_chan(cx, cy, bPlane);
+            rgba[count][ACOMP] = (GLchan) (solve_plane_chan(cx, cy, aPlane) * coverage);
 #endif
 #ifdef DO_INDEX
             {
                GLint frac = compute_coveragei(pMin, pMid, pMax, ix, iy);
-               GLint indx = (GLint) solve_plane(ix, iy, iPlane);
+               GLint indx = (GLint) solve_plane(cx, cy, iPlane);
                index[count] = (indx & ~0xf) | frac;
             }
 #endif
 #ifdef DO_SPEC
-            spec[count][RCOMP] = solve_plane_chan(ix, iy, srPlane);
-            spec[count][GCOMP] = solve_plane_chan(ix, iy, sgPlane);
-            spec[count][BCOMP] = solve_plane_chan(ix, iy, sbPlane);
+            spec[count][RCOMP] = solve_plane_chan(cx, cy, srPlane);
+            spec[count][GCOMP] = solve_plane_chan(cx, cy, sgPlane);
+            spec[count][BCOMP] = solve_plane_chan(cx, cy, sbPlane);
 #endif
 #ifdef DO_TEX
             {
-               GLfloat invQ = solve_plane_recip(ix, iy, vPlane);
-               s[count] = solve_plane(ix, iy, sPlane) * invQ;
-               t[count] = solve_plane(ix, iy, tPlane) * invQ;
-               u[count] = solve_plane(ix, iy, uPlane) * invQ;
+               const GLfloat invQ = solve_plane_recip(cx, cy, vPlane);
+               s[count] = solve_plane(cx, cy, sPlane) * invQ;
+               t[count] = solve_plane(cx, cy, tPlane) * invQ;
+               u[count] = solve_plane(cx, cy, uPlane) * invQ;
                lambda[count] = compute_lambda(sPlane, tPlane, invQ,
                                                  texWidth, texHeight);
             }
                GLuint unit;
                for (unit = 0; unit < ctx->Const.MaxTextureUnits; unit++) {
                   if (ctx->Texture.Unit[unit]._ReallyEnabled) {
-                     GLfloat invQ = solve_plane_recip(ix, iy, vPlane[unit]);
-                     s[unit][count] = solve_plane(ix, iy, sPlane[unit]) * invQ;
-                     t[unit][count] = solve_plane(ix, iy, tPlane[unit]) * invQ;
-                     u[unit][count] = solve_plane(ix, iy, uPlane[unit]) * invQ;
+                     GLfloat invQ = solve_plane_recip(cx, cy, vPlane[unit]);
+                     s[unit][count] = solve_plane(cx, cy, sPlane[unit]) * invQ;
+                     t[unit][count] = solve_plane(cx, cy, tPlane[unit]) * invQ;
+                     u[unit][count] = solve_plane(cx, cy, uPlane[unit]) * invQ;
                      lambda[unit][count] = compute_lambda(sPlane[unit],
                           tPlane[unit], invQ, texWidth[unit], texHeight[unit]);
                   }
          ix = startX;
          count = 0;
          while (coverage > 0.0F) {
+            /* (cx,cy) = center of fragment */
+            const GLfloat cx = ix + 0.5F, cy = iy + 0.5F;
 #ifdef DO_Z
-            z[ix] = (GLdepth) solve_plane(ix, iy, zPlane);
-            fog[ix] = solve_plane(ix, iy, fogPlane);
+            z[ix] = (GLdepth) solve_plane(cx, cy, zPlane);
+            fog[ix] = solve_plane(cx, cy, fogPlane);
 #endif
 #ifdef DO_RGBA
-            rgba[ix][RCOMP] = solve_plane_chan(ix, iy, rPlane);
-            rgba[ix][GCOMP] = solve_plane_chan(ix, iy, gPlane);
-            rgba[ix][BCOMP] = solve_plane_chan(ix, iy, bPlane);
-            rgba[ix][ACOMP] = (GLchan) (solve_plane_chan(ix, iy, aPlane) * coverage);
+            rgba[ix][RCOMP] = solve_plane_chan(cx, cy, rPlane);
+            rgba[ix][GCOMP] = solve_plane_chan(cx, cy, gPlane);
+            rgba[ix][BCOMP] = solve_plane_chan(cx, cy, bPlane);
+            rgba[ix][ACOMP] = (GLchan) (solve_plane_chan(cx, cy, aPlane) * coverage);
 #endif
 #ifdef DO_INDEX
             {
                GLint frac = compute_coveragei(pMin, pMax, pMid, ix, iy);
-               GLint indx = (GLint) solve_plane(ix, iy, iPlane);
+               GLint indx = (GLint) solve_plane(cx, cy, iPlane);
                index[ix] = (indx & ~0xf) | frac;
             }
 #endif
 #ifdef DO_SPEC
-            spec[ix][RCOMP] = solve_plane_chan(ix, iy, srPlane);
-            spec[ix][GCOMP] = solve_plane_chan(ix, iy, sgPlane);
-            spec[ix][BCOMP] = solve_plane_chan(ix, iy, sbPlane);
+            spec[ix][RCOMP] = solve_plane_chan(cx, cy, srPlane);
+            spec[ix][GCOMP] = solve_plane_chan(cx, cy, sgPlane);
+            spec[ix][BCOMP] = solve_plane_chan(cx, cy, sbPlane);
 #endif
 #ifdef DO_TEX
             {
-               GLfloat invQ = solve_plane_recip(ix, iy, vPlane);
-               s[ix] = solve_plane(ix, iy, sPlane) * invQ;
-               t[ix] = solve_plane(ix, iy, tPlane) * invQ;
-               u[ix] = solve_plane(ix, iy, uPlane) * invQ;
+               const GLfloat invQ = solve_plane_recip(cx, cy, vPlane);
+               s[ix] = solve_plane(cx, cy, sPlane) * invQ;
+               t[ix] = solve_plane(cx, cy, tPlane) * invQ;
+               u[ix] = solve_plane(cx, cy, uPlane) * invQ;
                lambda[ix] = compute_lambda(sPlane, tPlane, invQ,
                                               texWidth, texHeight);
             }
                GLuint unit;
                for (unit = 0; unit < ctx->Const.MaxTextureUnits; unit++) {
                   if (ctx->Texture.Unit[unit]._ReallyEnabled) {
-                     GLfloat invQ = solve_plane_recip(ix, iy, vPlane[unit]);
-                     s[unit][ix] = solve_plane(ix, iy, sPlane[unit]) * invQ;
-                     t[unit][ix] = solve_plane(ix, iy, tPlane[unit]) * invQ;
-                     u[unit][ix] = solve_plane(ix, iy, uPlane[unit]) * invQ;
+                     GLfloat invQ = solve_plane_recip(cx, cy, vPlane[unit]);
+                     s[unit][ix] = solve_plane(cx, cy, sPlane[unit]) * invQ;
+                     t[unit][ix] = solve_plane(cx, cy, tPlane[unit]) * invQ;
+                     u[unit][ix] = solve_plane(cx, cy, uPlane[unit]) * invQ;
                      lambda[unit][ix] = compute_lambda(sPlane[unit],
                          tPlane[unit], invQ, texWidth[unit], texHeight[unit]);
                   }