| /* $Id: s_tritemp.h,v 1.24 2001/08/14 14:08:44 brianp Exp $ */ | |||||
| /* $Id: s_tritemp.h,v 1.25 2001/09/13 21:54:29 brianp Exp $ */ | |||||
| /* | /* | ||||
| * Mesa 3-D graphics library | * Mesa 3-D graphics library | ||||
| { | { | ||||
| typedef struct { | typedef struct { | ||||
| const SWvertex *v0, *v1; /* Y(v0) < Y(v1) */ | const SWvertex *v0, *v1; /* Y(v0) < Y(v1) */ | ||||
| GLfloat dx; /* X(v1) - X(v0) */ | |||||
| GLfloat dy; /* Y(v1) - Y(v0) */ | |||||
| GLfixed fdxdy; /* dx/dy in fixed-point */ | |||||
| GLfixed fsx; /* first sample point x coord */ | |||||
| GLfixed fsy; | |||||
| GLfloat adjy; /* adjust from v[0]->fy to fsy, scaled */ | |||||
| GLint lines; /* number of lines to be sampled on this edge */ | |||||
| GLfixed fx0; /* fixed pt X of lower endpoint */ | |||||
| GLfloat dx; /* X(v1) - X(v0) */ | |||||
| GLfloat dy; /* Y(v1) - Y(v0) */ | |||||
| GLfixed fdxdy; /* dx/dy in fixed-point */ | |||||
| GLfixed fsx; /* first sample point x coord */ | |||||
| GLfixed fsy; | |||||
| GLfloat adjy; /* adjust from v[0]->fy to fsy, scaled */ | |||||
| GLint lines; /* number of lines to be sampled on this edge */ | |||||
| GLfixed fx0; /* fixed pt X of lower endpoint */ | |||||
| } EdgeT; | } EdgeT; | ||||
| #ifdef INTERP_Z | #ifdef INTERP_Z | ||||
| const GLfixed fy2 = FloatToFixed(v2->win[1] - 0.5F) & snapMask; | const GLfixed fy2 = FloatToFixed(v2->win[1] - 0.5F) & snapMask; | ||||
| if (fy0 <= fy1) { | if (fy0 <= fy1) { | ||||
| if (fy1 <= fy2) { | |||||
| if (fy1 <= fy2) { | |||||
| /* y0 <= y1 <= y2 */ | /* y0 <= y1 <= y2 */ | ||||
| vMin = v0; vMid = v1; vMax = v2; | |||||
| vMin = v0; vMid = v1; vMax = v2; | |||||
| vMin_fy = fy0; vMid_fy = fy1; vMax_fy = fy2; | vMin_fy = fy0; vMid_fy = fy1; vMax_fy = fy2; | ||||
| } | |||||
| else if (fy2 <= fy0) { | |||||
| } | |||||
| else if (fy2 <= fy0) { | |||||
| /* y2 <= y0 <= y1 */ | /* y2 <= y0 <= y1 */ | ||||
| vMin = v2; vMid = v0; vMax = v1; | |||||
| vMin = v2; vMid = v0; vMax = v1; | |||||
| vMin_fy = fy2; vMid_fy = fy0; vMax_fy = fy1; | vMin_fy = fy2; vMid_fy = fy0; vMax_fy = fy1; | ||||
| } | |||||
| else { | |||||
| } | |||||
| else { | |||||
| /* y0 <= y2 <= y1 */ | /* y0 <= y2 <= y1 */ | ||||
| vMin = v0; vMid = v2; vMax = v1; | |||||
| vMin = v0; vMid = v2; vMax = v1; | |||||
| vMin_fy = fy0; vMid_fy = fy2; vMax_fy = fy1; | vMin_fy = fy0; vMid_fy = fy2; vMax_fy = fy1; | ||||
| bf = -bf; | bf = -bf; | ||||
| } | |||||
| } | |||||
| } | } | ||||
| else { | else { | ||||
| if (fy0 <= fy2) { | |||||
| if (fy0 <= fy2) { | |||||
| /* y1 <= y0 <= y2 */ | /* y1 <= y0 <= y2 */ | ||||
| vMin = v1; vMid = v0; vMax = v2; | |||||
| vMin = v1; vMid = v0; vMax = v2; | |||||
| vMin_fy = fy1; vMid_fy = fy0; vMax_fy = fy2; | vMin_fy = fy1; vMid_fy = fy0; vMax_fy = fy2; | ||||
| bf = -bf; | bf = -bf; | ||||
| } | |||||
| else if (fy2 <= fy1) { | |||||
| } | |||||
| else if (fy2 <= fy1) { | |||||
| /* y2 <= y1 <= y0 */ | /* y2 <= y1 <= y0 */ | ||||
| vMin = v2; vMid = v1; vMax = v0; | |||||
| vMin = v2; vMid = v1; vMax = v0; | |||||
| vMin_fy = fy2; vMid_fy = fy1; vMax_fy = fy0; | vMin_fy = fy2; vMid_fy = fy1; vMax_fy = fy0; | ||||
| bf = -bf; | bf = -bf; | ||||
| } | |||||
| else { | |||||
| } | |||||
| else { | |||||
| /* y1 <= y2 <= y0 */ | /* y1 <= y2 <= y0 */ | ||||
| vMin = v1; vMid = v2; vMax = v0; | |||||
| vMin = v1; vMid = v2; vMax = v0; | |||||
| vMin_fy = fy1; vMid_fy = fy2; vMax_fy = fy0; | vMin_fy = fy1; vMid_fy = fy2; vMax_fy = fy0; | ||||
| } | |||||
| } | |||||
| } | } | ||||
| /* fixed point X coords */ | /* fixed point X coords */ | ||||
| /* Do backface culling */ | /* Do backface culling */ | ||||
| if (area * bf < 0.0) | if (area * bf < 0.0) | ||||
| return; | |||||
| return; | |||||
| if (area == 0.0F) | if (area == 0.0F) | ||||
| return; | return; | ||||
| span.redStep = SignedFloatToFixed(drdx); | span.redStep = SignedFloatToFixed(drdx); | ||||
| drdy = oneOverArea * (eMaj.dx * eBot_dr - eMaj_dr * eBot.dx); | drdy = oneOverArea * (eMaj.dx * eBot_dr - eMaj_dr * eBot.dx); | ||||
| eMaj_dg = (GLint) vMax->color[GCOMP] - (GLint) vMin->color[GCOMP]; | eMaj_dg = (GLint) vMax->color[GCOMP] - (GLint) vMin->color[GCOMP]; | ||||
| eBot_dg = (GLint) vMid->color[GCOMP] - (GLint) vMin->color[GCOMP]; | |||||
| eBot_dg = (GLint) vMid->color[GCOMP] - (GLint) vMin->color[GCOMP]; | |||||
| dgdx = oneOverArea * (eMaj_dg * eBot.dy - eMaj.dy * eBot_dg); | dgdx = oneOverArea * (eMaj_dg * eBot.dy - eMaj.dy * eBot_dg); | ||||
| span.greenStep = SignedFloatToFixed(dgdx); | span.greenStep = SignedFloatToFixed(dgdx); | ||||
| dgdy = oneOverArea * (eMaj.dx * eBot_dg - eMaj_dg * eBot.dx); | dgdy = oneOverArea * (eMaj.dx * eBot_dg - eMaj_dg * eBot.dx); | ||||
| eBot_db = (GLint) vMid->color[BCOMP] - (GLint) vMin->color[BCOMP]; | eBot_db = (GLint) vMid->color[BCOMP] - (GLint) vMin->color[BCOMP]; | ||||
| dbdx = oneOverArea * (eMaj_db * eBot.dy - eMaj.dy * eBot_db); | dbdx = oneOverArea * (eMaj_db * eBot.dy - eMaj.dy * eBot_db); | ||||
| span.blueStep = SignedFloatToFixed(dbdx); | span.blueStep = SignedFloatToFixed(dbdx); | ||||
| dbdy = oneOverArea * (eMaj.dx * eBot_db - eMaj_db * eBot.dx); | |||||
| dbdy = oneOverArea * (eMaj.dx * eBot_db - eMaj_db * eBot.dx); | |||||
| # ifdef INTERP_ALPHA | # ifdef INTERP_ALPHA | ||||
| eMaj_da = (GLint) vMax->color[ACOMP] - (GLint) vMin->color[ACOMP]; | eMaj_da = (GLint) vMax->color[ACOMP] - (GLint) vMin->color[ACOMP]; | ||||
| eBot_da = (GLint) vMid->color[ACOMP] - (GLint) vMin->color[ACOMP]; | eBot_da = (GLint) vMid->color[ACOMP] - (GLint) vMin->color[ACOMP]; | ||||
| span.redStep = drdx; | span.redStep = drdx; | ||||
| drdy = oneOverArea * (eMaj.dx * eBot_dr - eMaj_dr * eBot.dx); | drdy = oneOverArea * (eMaj.dx * eBot_dr - eMaj_dr * eBot.dx); | ||||
| eMaj_dg = vMax->color[GCOMP] - vMin->color[GCOMP]; | eMaj_dg = vMax->color[GCOMP] - vMin->color[GCOMP]; | ||||
| eBot_dg = vMid->color[GCOMP] - vMin->color[GCOMP]; | |||||
| eBot_dg = vMid->color[GCOMP] - vMin->color[GCOMP]; | |||||
| dgdx = oneOverArea * (eMaj_dg * eBot.dy - eMaj.dy * eBot_dg); | dgdx = oneOverArea * (eMaj_dg * eBot.dy - eMaj.dy * eBot_dg); | ||||
| span.greenStep = dgdx; | span.greenStep = dgdx; | ||||
| dgdy = oneOverArea * (eMaj.dx * eBot_dg - eMaj_dg * eBot.dx); | dgdy = oneOverArea * (eMaj.dx * eBot_dg - eMaj_dg * eBot.dx); | ||||
| eBot_db = vMid->color[BCOMP] - vMin->color[BCOMP]; | eBot_db = vMid->color[BCOMP] - vMin->color[BCOMP]; | ||||
| dbdx = oneOverArea * (eMaj_db * eBot.dy - eMaj.dy * eBot_db); | dbdx = oneOverArea * (eMaj_db * eBot.dy - eMaj.dy * eBot_db); | ||||
| span.blueStep = dbdx; | span.blueStep = dbdx; | ||||
| dbdy = oneOverArea * (eMaj.dx * eBot_db - eMaj_db * eBot.dx); | |||||
| dbdy = oneOverArea * (eMaj.dx * eBot_db - eMaj_db * eBot.dx); | |||||
| eMaj_da = vMax->color[ACOMP] - vMin->color[ACOMP]; | eMaj_da = vMax->color[ACOMP] - vMin->color[ACOMP]; | ||||
| eBot_da = vMid->color[ACOMP] - vMin->color[ACOMP]; | eBot_da = vMid->color[ACOMP] - vMin->color[ACOMP]; | ||||
| dadx = oneOverArea * (eMaj_da * eBot.dy - eMaj.dy * eBot_da); | dadx = oneOverArea * (eMaj_da * eBot.dy - eMaj.dy * eBot_da); | ||||
| span.specRedStep = SignedFloatToFixed(dsrdx); | span.specRedStep = SignedFloatToFixed(dsrdx); | ||||
| dsrdy = oneOverArea * (eMaj.dx * eBot_dsr - eMaj_dsr * eBot.dx); | dsrdy = oneOverArea * (eMaj.dx * eBot_dsr - eMaj_dsr * eBot.dx); | ||||
| eMaj_dsg = (GLint) vMax->specular[GCOMP] - (GLint) vMin->specular[GCOMP]; | eMaj_dsg = (GLint) vMax->specular[GCOMP] - (GLint) vMin->specular[GCOMP]; | ||||
| eBot_dsg = (GLint) vMid->specular[GCOMP] - (GLint) vMin->specular[GCOMP]; | |||||
| eBot_dsg = (GLint) vMid->specular[GCOMP] - (GLint) vMin->specular[GCOMP]; | |||||
| dsgdx = oneOverArea * (eMaj_dsg * eBot.dy - eMaj.dy * eBot_dsg); | dsgdx = oneOverArea * (eMaj_dsg * eBot.dy - eMaj.dy * eBot_dsg); | ||||
| span.specGreenStep = SignedFloatToFixed(dsgdx); | span.specGreenStep = SignedFloatToFixed(dsgdx); | ||||
| dsgdy = oneOverArea * (eMaj.dx * eBot_dsg - eMaj_dsg * eBot.dx); | dsgdy = oneOverArea * (eMaj.dx * eBot_dsg - eMaj_dsg * eBot.dx); | ||||
| eBot_dsb = (GLint) vMid->specular[BCOMP] - (GLint) vMin->specular[BCOMP]; | eBot_dsb = (GLint) vMid->specular[BCOMP] - (GLint) vMin->specular[BCOMP]; | ||||
| dsbdx = oneOverArea * (eMaj_dsb * eBot.dy - eMaj.dy * eBot_dsb); | dsbdx = oneOverArea * (eMaj_dsb * eBot.dy - eMaj.dy * eBot_dsb); | ||||
| span.specBlueStep = SignedFloatToFixed(dsbdx); | span.specBlueStep = SignedFloatToFixed(dsbdx); | ||||
| dsbdy = oneOverArea * (eMaj.dx * eBot_dsb - eMaj_dsb * eBot.dx); | |||||
| dsbdy = oneOverArea * (eMaj.dx * eBot_dsb - eMaj_dsb * eBot.dx); | |||||
| } | } | ||||
| else { | else { | ||||
| dsrdx = dsrdy = 0.0F; | dsrdx = dsrdy = 0.0F; | ||||
| span.specRedStep = dsrdx; | span.specRedStep = dsrdx; | ||||
| dsrdy = oneOverArea * (eMaj.dx * eBot_dsr - eMaj_dsr * eBot.dx); | dsrdy = oneOverArea * (eMaj.dx * eBot_dsr - eMaj_dsr * eBot.dx); | ||||
| eMaj_dsg = vMax->specular[GCOMP] - vMin->specular[GCOMP]; | eMaj_dsg = vMax->specular[GCOMP] - vMin->specular[GCOMP]; | ||||
| eBot_dsg = vMid->specular[GCOMP] - vMin->specular[GCOMP]; | |||||
| eBot_dsg = vMid->specular[GCOMP] - vMin->specular[GCOMP]; | |||||
| dsgdx = oneOverArea * (eMaj_dsg * eBot.dy - eMaj.dy * eBot_dsg); | dsgdx = oneOverArea * (eMaj_dsg * eBot.dy - eMaj.dy * eBot_dsg); | ||||
| span.specGreenStep = dsgdx; | span.specGreenStep = dsgdx; | ||||
| dsgdy = oneOverArea * (eMaj.dx * eBot_dsg - eMaj_dsg * eBot.dx); | dsgdy = oneOverArea * (eMaj.dx * eBot_dsg - eMaj_dsg * eBot.dx); | ||||
| eBot_dsb = vMid->specular[BCOMP] - vMin->specular[BCOMP]; | eBot_dsb = vMid->specular[BCOMP] - vMin->specular[BCOMP]; | ||||
| dsbdx = oneOverArea * (eMaj_dsb * eBot.dy - eMaj.dy * eBot_dsb); | dsbdx = oneOverArea * (eMaj_dsb * eBot.dy - eMaj.dy * eBot_dsb); | ||||
| span.specBlueStep = dsbdx; | span.specBlueStep = dsbdx; | ||||
| dsbdy = oneOverArea * (eMaj.dx * eBot_dsb - eMaj_dsb * eBot.dx); | |||||
| dsbdy = oneOverArea * (eMaj.dx * eBot_dsb - eMaj_dsb * eBot.dx); | |||||
| } | } | ||||
| else { | else { | ||||
| dsrdx = dsrdy = span.specRedStep = 0; | dsrdx = dsrdy = span.specRedStep = 0; | ||||
| - eMaj.dy * eBot_ds); | - eMaj.dy * eBot_ds); | ||||
| dsdy = oneOverArea * (eMaj.dx * eBot_ds - eMaj_ds * eBot.dx); | dsdy = oneOverArea * (eMaj.dx * eBot_ds - eMaj_ds * eBot.dx); | ||||
| eMaj_dt = vMax->texcoord[0][1] * wMax - vMin->texcoord[0][1] * wMin; | |||||
| eBot_dt = vMid->texcoord[0][1] * wMid - vMin->texcoord[0][1] * wMin; | |||||
| span.texStep[0][1] = oneOverArea * (eMaj_dt * eBot.dy | |||||
| eMaj_dt = vMax->texcoord[0][1] * wMax - vMin->texcoord[0][1] * wMin; | |||||
| eBot_dt = vMid->texcoord[0][1] * wMid - vMin->texcoord[0][1] * wMin; | |||||
| span.texStep[0][1] = oneOverArea * (eMaj_dt * eBot.dy | |||||
| - eMaj.dy * eBot_dt); | - eMaj.dy * eBot_dt); | ||||
| dtdy = oneOverArea * (eMaj.dx * eBot_dt - eMaj_dt * eBot.dx); | |||||
| dtdy = oneOverArea * (eMaj.dx * eBot_dt - eMaj_dt * eBot.dx); | |||||
| eMaj_du = vMax->texcoord[0][2] * wMax - vMin->texcoord[0][2] * wMin; | |||||
| eBot_du = vMid->texcoord[0][2] * wMid - vMin->texcoord[0][2] * wMin; | |||||
| span.texStep[0][2] = oneOverArea * (eMaj_du * eBot.dy | |||||
| eMaj_du = vMax->texcoord[0][2] * wMax - vMin->texcoord[0][2] * wMin; | |||||
| eBot_du = vMid->texcoord[0][2] * wMid - vMin->texcoord[0][2] * wMin; | |||||
| span.texStep[0][2] = oneOverArea * (eMaj_du * eBot.dy | |||||
| - eMaj.dy * eBot_du); | - eMaj.dy * eBot_du); | ||||
| dudy = oneOverArea * (eMaj.dx * eBot_du - eMaj_du * eBot.dx); | |||||
| dudy = oneOverArea * (eMaj.dx * eBot_du - eMaj_du * eBot.dx); | |||||
| eMaj_dv = vMax->texcoord[0][3] * wMax - vMin->texcoord[0][3] * wMin; | |||||
| eBot_dv = vMid->texcoord[0][3] * wMid - vMin->texcoord[0][3] * wMin; | |||||
| span.texStep[0][3] = oneOverArea * (eMaj_dv * eBot.dy | |||||
| eMaj_dv = vMax->texcoord[0][3] * wMax - vMin->texcoord[0][3] * wMin; | |||||
| eBot_dv = vMid->texcoord[0][3] * wMid - vMin->texcoord[0][3] * wMin; | |||||
| span.texStep[0][3] = oneOverArea * (eMaj_dv * eBot.dy | |||||
| - eMaj.dy * eBot_dv); | - eMaj.dy * eBot_dv); | ||||
| dvdy = oneOverArea * (eMaj.dx * eBot_dv - eMaj_dv * eBot.dx); | |||||
| dvdy = oneOverArea * (eMaj.dx * eBot_dv - eMaj_dv * eBot.dx); | |||||
| } | } | ||||
| # ifdef INTERP_LAMBDA | # ifdef INTERP_LAMBDA | ||||
| { | { | ||||
| - eMaj.dy * eBot_ds); | - eMaj.dy * eBot_ds); | ||||
| dsdy[u] = oneOverArea * (eMaj.dx * eBot_ds - eMaj_ds * eBot.dx); | dsdy[u] = oneOverArea * (eMaj.dx * eBot_ds - eMaj_ds * eBot.dx); | ||||
| eMaj_dt = vMax->texcoord[u][1] * wMax | |||||
| - vMin->texcoord[u][1] * wMin; | |||||
| eBot_dt = vMid->texcoord[u][1] * wMid | |||||
| - vMin->texcoord[u][1] * wMin; | |||||
| span.texStep[u][1] = oneOverArea * (eMaj_dt * eBot.dy | |||||
| eMaj_dt = vMax->texcoord[u][1] * wMax | |||||
| - vMin->texcoord[u][1] * wMin; | |||||
| eBot_dt = vMid->texcoord[u][1] * wMid | |||||
| - vMin->texcoord[u][1] * wMin; | |||||
| span.texStep[u][1] = oneOverArea * (eMaj_dt * eBot.dy | |||||
| - eMaj.dy * eBot_dt); | - eMaj.dy * eBot_dt); | ||||
| dtdy[u] = oneOverArea * (eMaj.dx * eBot_dt - eMaj_dt * eBot.dx); | |||||
| dtdy[u] = oneOverArea * (eMaj.dx * eBot_dt - eMaj_dt * eBot.dx); | |||||
| eMaj_du = vMax->texcoord[u][2] * wMax | |||||
| eMaj_du = vMax->texcoord[u][2] * wMax | |||||
| - vMin->texcoord[u][2] * wMin; | - vMin->texcoord[u][2] * wMin; | ||||
| eBot_du = vMid->texcoord[u][2] * wMid | |||||
| eBot_du = vMid->texcoord[u][2] * wMid | |||||
| - vMin->texcoord[u][2] * wMin; | - vMin->texcoord[u][2] * wMin; | ||||
| span.texStep[u][2] = oneOverArea * (eMaj_du * eBot.dy | |||||
| span.texStep[u][2] = oneOverArea * (eMaj_du * eBot.dy | |||||
| - eMaj.dy * eBot_du); | - eMaj.dy * eBot_du); | ||||
| dudy[u] = oneOverArea * (eMaj.dx * eBot_du - eMaj_du * eBot.dx); | |||||
| dudy[u] = oneOverArea * (eMaj.dx * eBot_du - eMaj_du * eBot.dx); | |||||
| eMaj_dv = vMax->texcoord[u][3] * wMax | |||||
| eMaj_dv = vMax->texcoord[u][3] * wMax | |||||
| - vMin->texcoord[u][3] * wMin; | - vMin->texcoord[u][3] * wMin; | ||||
| eBot_dv = vMid->texcoord[u][3] * wMid | |||||
| eBot_dv = vMid->texcoord[u][3] * wMid | |||||
| - vMin->texcoord[u][3] * wMin; | - vMin->texcoord[u][3] * wMin; | ||||
| span.texStep[u][3] = oneOverArea * (eMaj_dv * eBot.dy | |||||
| span.texStep[u][3] = oneOverArea * (eMaj_dv * eBot.dy | |||||
| - eMaj.dy * eBot_dv); | - eMaj.dy * eBot_dv); | ||||
| dvdy[u] = oneOverArea * (eMaj.dx * eBot_dv - eMaj_dv * eBot.dx); | |||||
| dvdy[u] = oneOverArea * (eMaj.dx * eBot_dv - eMaj_dv * eBot.dx); | |||||
| # ifdef INTERP_LAMBDA | # ifdef INTERP_LAMBDA | ||||
| { | { | ||||
| GLfloat dudx = span.texStep[u][0] * span.texWidth[u]; | GLfloat dudx = span.texStep[u][0] * span.texWidth[u]; | ||||
| + dsdy * adjy) + FIXED_HALF; | + dsdy * adjy) + FIXED_HALF; | ||||
| fdsOuter = SignedFloatToFixed(dsdy + dxOuter * dsdx); | fdsOuter = SignedFloatToFixed(dsdy + dxOuter * dsdx); | ||||
| t0 = vLower->texcoord[0][1] * T_SCALE; | |||||
| ft = (GLfixed)(t0 * FIXED_SCALE + dtdx * adjx | |||||
| t0 = vLower->texcoord[0][1] * T_SCALE; | |||||
| ft = (GLfixed)(t0 * FIXED_SCALE + dtdx * adjx | |||||
| + dtdy * adjy) + FIXED_HALF; | + dtdy * adjy) + FIXED_HALF; | ||||
| fdtOuter = SignedFloatToFixed(dtdy + dxOuter * dtdx); | |||||
| } | |||||
| fdtOuter = SignedFloatToFixed(dtdy + dxOuter * dtdx); | |||||
| } | |||||
| #endif | #endif | ||||
| #ifdef INTERP_TEX | #ifdef INTERP_TEX | ||||
| { | { | ||||
| sLeft = s0 + (span.texStep[0][0] * adjx + dsdy * adjy) | sLeft = s0 + (span.texStep[0][0] * adjx + dsdy * adjy) | ||||
| * (1.0F/FIXED_SCALE); | * (1.0F/FIXED_SCALE); | ||||
| dsOuter = dsdy + dxOuter * span.texStep[0][0]; | dsOuter = dsdy + dxOuter * span.texStep[0][0]; | ||||
| t0 = vLower->texcoord[0][1] * invW; | |||||
| tLeft = t0 + (span.texStep[0][1] * adjx + dtdy * adjy) | |||||
| t0 = vLower->texcoord[0][1] * invW; | |||||
| tLeft = t0 + (span.texStep[0][1] * adjx + dtdy * adjy) | |||||
| * (1.0F/FIXED_SCALE); | * (1.0F/FIXED_SCALE); | ||||
| dtOuter = dtdy + dxOuter * span.texStep[0][1]; | |||||
| u0 = vLower->texcoord[0][2] * invW; | |||||
| uLeft = u0 + (span.texStep[0][2] * adjx + dudy * adjy) | |||||
| dtOuter = dtdy + dxOuter * span.texStep[0][1]; | |||||
| u0 = vLower->texcoord[0][2] * invW; | |||||
| uLeft = u0 + (span.texStep[0][2] * adjx + dudy * adjy) | |||||
| * (1.0F/FIXED_SCALE); | * (1.0F/FIXED_SCALE); | ||||
| duOuter = dudy + dxOuter * span.texStep[0][2]; | |||||
| v0 = vLower->texcoord[0][3] * invW; | |||||
| vLeft = v0 + (span.texStep[0][3] * adjx + dvdy * adjy) | |||||
| duOuter = dudy + dxOuter * span.texStep[0][2]; | |||||
| v0 = vLower->texcoord[0][3] * invW; | |||||
| vLeft = v0 + (span.texStep[0][3] * adjx + dvdy * adjy) | |||||
| * (1.0F/FIXED_SCALE); | * (1.0F/FIXED_SCALE); | ||||
| dvOuter = dvdy + dxOuter * span.texStep[0][3]; | |||||
| dvOuter = dvdy + dxOuter * span.texStep[0][3]; | |||||
| } | } | ||||
| #endif | #endif | ||||
| #ifdef INTERP_MULTITEX | #ifdef INTERP_MULTITEX | ||||
| sLeft[u] = s0 + (span.texStep[u][0] * adjx + dsdy[u] | sLeft[u] = s0 + (span.texStep[u][0] * adjx + dsdy[u] | ||||
| * adjy) * (1.0F/FIXED_SCALE); | * adjy) * (1.0F/FIXED_SCALE); | ||||
| dsOuter[u] = dsdy[u] + dxOuter * span.texStep[u][0]; | dsOuter[u] = dsdy[u] + dxOuter * span.texStep[u][0]; | ||||
| t0 = vLower->texcoord[u][1] * invW; | |||||
| tLeft[u] = t0 + (span.texStep[u][1] * adjx + dtdy[u] | |||||
| t0 = vLower->texcoord[u][1] * invW; | |||||
| tLeft[u] = t0 + (span.texStep[u][1] * adjx + dtdy[u] | |||||
| * adjy) * (1.0F/FIXED_SCALE); | * adjy) * (1.0F/FIXED_SCALE); | ||||
| dtOuter[u] = dtdy[u] + dxOuter * span.texStep[u][1]; | |||||
| u0 = vLower->texcoord[u][2] * invW; | |||||
| uLeft[u] = u0 + (span.texStep[u][2] * adjx + dudy[u] | |||||
| dtOuter[u] = dtdy[u] + dxOuter * span.texStep[u][1]; | |||||
| u0 = vLower->texcoord[u][2] * invW; | |||||
| uLeft[u] = u0 + (span.texStep[u][2] * adjx + dudy[u] | |||||
| * adjy) * (1.0F/FIXED_SCALE); | * adjy) * (1.0F/FIXED_SCALE); | ||||
| duOuter[u] = dudy[u] + dxOuter * span.texStep[u][2]; | |||||
| v0 = vLower->texcoord[u][3] * invW; | |||||
| duOuter[u] = dudy[u] + dxOuter * span.texStep[u][2]; | |||||
| v0 = vLower->texcoord[u][3] * invW; | |||||
| vLeft[u] = v0 + (span.texStep[u][3] * adjx + dvdy[u] | vLeft[u] = v0 + (span.texStep[u][3] * adjx + dvdy[u] | ||||
| * adjy) * (1.0F/FIXED_SCALE); | * adjy) * (1.0F/FIXED_SCALE); | ||||
| dvOuter[u] = dvdy[u] + dxOuter * span.texStep[u][3]; | dvOuter[u] = dvdy[u] + dxOuter * span.texStep[u][3]; | ||||
| fdtInner = fdtOuter + span.intTexStep[1]; | fdtInner = fdtOuter + span.intTexStep[1]; | ||||
| #endif | #endif | ||||
| #ifdef INTERP_TEX | #ifdef INTERP_TEX | ||||
| dsInner = dsOuter + span.texStep[0][0]; | |||||
| dtInner = dtOuter + span.texStep[0][1]; | |||||
| duInner = duOuter + span.texStep[0][2]; | |||||
| dvInner = dvOuter + span.texStep[0][3]; | |||||
| dsInner = dsOuter + span.texStep[0][0]; | |||||
| dtInner = dtOuter + span.texStep[0][1]; | |||||
| duInner = duOuter + span.texStep[0][2]; | |||||
| dvInner = dvOuter + span.texStep[0][3]; | |||||
| #endif | #endif | ||||
| #ifdef INTERP_MULTITEX | #ifdef INTERP_MULTITEX | ||||
| { | { | ||||
| ft += fdtOuter; | ft += fdtOuter; | ||||
| #endif | #endif | ||||
| #ifdef INTERP_TEX | #ifdef INTERP_TEX | ||||
| sLeft += dsOuter; | |||||
| tLeft += dtOuter; | |||||
| uLeft += duOuter; | |||||
| vLeft += dvOuter; | |||||
| sLeft += dsOuter; | |||||
| tLeft += dtOuter; | |||||
| uLeft += duOuter; | |||||
| vLeft += dvOuter; | |||||
| #endif | #endif | ||||
| #ifdef INTERP_MULTITEX | #ifdef INTERP_MULTITEX | ||||
| { | { | ||||
| ft += fdtInner; | ft += fdtInner; | ||||
| #endif | #endif | ||||
| #ifdef INTERP_TEX | #ifdef INTERP_TEX | ||||
| sLeft += dsInner; | |||||
| tLeft += dtInner; | |||||
| uLeft += duInner; | |||||
| vLeft += dvInner; | |||||
| sLeft += dsInner; | |||||
| tLeft += dtInner; | |||||
| uLeft += duInner; | |||||
| vLeft += dvInner; | |||||
| #endif | #endif | ||||
| #ifdef INTERP_MULTITEX | #ifdef INTERP_MULTITEX | ||||
| { | { |