diff options
author | Brian Paul <[email protected]> | 2001-05-07 16:01:59 +0000 |
---|---|---|
committer | Brian Paul <[email protected]> | 2001-05-07 16:01:59 +0000 |
commit | dae62174c5e7736aa93da8c17a20ea356d2f9bdf (patch) | |
tree | 78a018c5a8c6760156af0a7c6633071c87276e46 /src/mesa/swrast/s_aatritemp.h | |
parent | c5e907e501f7a3d08598eaaa5f2d805cef24edb9 (diff) |
sample plane equations at fragment centers, not lower-left corner
Diffstat (limited to 'src/mesa/swrast/s_aatritemp.h')
-rw-r--r-- | src/mesa/swrast/s_aatritemp.h | 78 |
1 files changed, 41 insertions, 37 deletions
diff --git a/src/mesa/swrast/s_aatritemp.h b/src/mesa/swrast/s_aatritemp.h index ae5abfcd7ea..4b921650976 100644 --- a/src/mesa/swrast/s_aatritemp.h +++ b/src/mesa/swrast/s_aatritemp.h @@ -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 @@ -268,34 +268,36 @@ 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); } @@ -304,10 +306,10 @@ 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]); } @@ -384,34 +386,36 @@ 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); } @@ -420,10 +424,10 @@ 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]); } |