⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 s_tritemp.h

📁 mesa-6.5-minigui源码
💻 H
📖 第 1 页 / 共 4 页
字号:
                  diOuter = SignedFloatToFixed(didy + dxOuter * didx);               }               else {                  ASSERT(ctx->Light.ShadeModel == GL_FLAT);                  iLeft = FloatToFixed(v2->index);                  diOuter = 0;               }#endif#ifdef INTERP_INT_TEX               {                  GLfloat s0, t0;                  s0 = vLower->texcoord[0][0] * S_SCALE;                  sLeft = (GLfixed)(s0 * FIXED_SCALE + span.texStepX[0][0] * adjx                                 + span.texStepY[0][0] * adjy) + FIXED_HALF;                  dsOuter = SignedFloatToFixed(span.texStepY[0][0] + dxOuter * span.texStepX[0][0]);                  t0 = vLower->texcoord[0][1] * T_SCALE;                  tLeft = (GLfixed)(t0 * FIXED_SCALE + span.texStepX[0][1] * adjx                                 + span.texStepY[0][1] * adjy) + FIXED_HALF;                  dtOuter = SignedFloatToFixed(span.texStepY[0][1] + dxOuter * span.texStepX[0][1]);               }#endif#ifdef INTERP_TEX               TEX_UNIT_LOOP(                  const GLfloat invW = vLower->win[3];                  const GLfloat s0 = vLower->texcoord[u][0] * invW;                  const GLfloat t0 = vLower->texcoord[u][1] * invW;                  const GLfloat u0 = vLower->texcoord[u][2] * invW;                  const GLfloat v0 = vLower->texcoord[u][3] * invW;                  sLeft[u] = s0 + (span.texStepX[u][0] * adjx + span.texStepY[u][0] * adjy) * (1.0F/FIXED_SCALE);                  tLeft[u] = t0 + (span.texStepX[u][1] * adjx + span.texStepY[u][1] * adjy) * (1.0F/FIXED_SCALE);                  uLeft[u] = u0 + (span.texStepX[u][2] * adjx + span.texStepY[u][2] * adjy) * (1.0F/FIXED_SCALE);                  vLeft[u] = v0 + (span.texStepX[u][3] * adjx + span.texStepY[u][3] * adjy) * (1.0F/FIXED_SCALE);                  dsOuter[u] = span.texStepY[u][0] + dxOuter * span.texStepX[u][0];                  dtOuter[u] = span.texStepY[u][1] + dxOuter * span.texStepX[u][1];                  duOuter[u] = span.texStepY[u][2] + dxOuter * span.texStepX[u][2];                  dvOuter[u] = span.texStepY[u][3] + dxOuter * span.texStepX[u][3];               )#endif            } /*if setupLeft*/            if (setupRight && eRight->lines>0) {#if TRIANGLE_WALK_DOUBLE               fxRightEdge = eRight->fsx;               fdxRightEdge = eRight->dxdy;#else               fxRightEdge = eRight->fsx - FIXED_EPSILON;               fdxRightEdge = eRight->fdxdy;#endif            }            if (lines==0) {               continue;            }            /* Rasterize setup */#ifdef PIXEL_ADDRESS            dPRowInner = dPRowOuter + sizeof(PIXEL_TYPE);#endif#ifdef INTERP_Z#  ifdef DEPTH_TYPE            dZRowInner = dZRowOuter + sizeof(DEPTH_TYPE);#  endif            fdzInner = fdzOuter + span.zStep;#endif#ifdef INTERP_W            dwInner = dwOuter + span.dwdx;#endif#ifdef INTERP_FOG            dfogInner = dfogOuter + span.dfogdx;#endif#ifdef INTERP_RGB            fdrInner = fdrOuter + span.redStep;            fdgInner = fdgOuter + span.greenStep;            fdbInner = fdbOuter + span.blueStep;#endif#ifdef INTERP_ALPHA            fdaInner = fdaOuter + span.alphaStep;#endif#ifdef INTERP_SPEC            dsrInner = dsrOuter + span.specRedStep;            dsgInner = dsgOuter + span.specGreenStep;            dsbInner = dsbOuter + span.specBlueStep;#endif#ifdef INTERP_INDEX            diInner = diOuter + span.indexStep;#endif#ifdef INTERP_INT_TEX            dsInner = dsOuter + span.intTexStep[0];            dtInner = dtOuter + span.intTexStep[1];#endif#ifdef INTERP_TEX            TEX_UNIT_LOOP(               dsInner[u] = dsOuter[u] + span.texStepX[u][0];               dtInner[u] = dtOuter[u] + span.texStepX[u][1];               duInner[u] = duOuter[u] + span.texStepX[u][2];               dvInner[u] = dvOuter[u] + span.texStepX[u][3];            )#endif            while (lines > 0) {               /* initialize the span interpolants to the leftmost value */               /* ff = fixed-pt fragment */               const GLint right = InterpToInt(fxRightEdge);               span.x = InterpToInt(fxLeftEdge);               if (right <= span.x)                  span.end = 0;               else                  span.end = right - span.x;#ifdef INTERP_Z               span.z = zLeft;#endif#ifdef INTERP_W               span.w = wLeft;#endif#ifdef INTERP_FOG               span.fog = fogLeft;#endif#ifdef INTERP_RGB               span.red = rLeft;               span.green = gLeft;               span.blue = bLeft;#endif#ifdef INTERP_ALPHA               span.alpha = aLeft;#endif#ifdef INTERP_SPEC               span.specRed = srLeft;               span.specGreen = sgLeft;               span.specBlue = sbLeft;#endif#ifdef INTERP_INDEX               span.index = iLeft;#endif#ifdef INTERP_INT_TEX               span.intTex[0] = sLeft;               span.intTex[1] = tLeft;#endif#ifdef INTERP_TEX               TEX_UNIT_LOOP(                  span.tex[u][0] = sLeft[u];                  span.tex[u][1] = tLeft[u];                  span.tex[u][2] = uLeft[u];                  span.tex[u][3] = vLeft[u];               )#endif               /* This is where we actually generate fragments */               /* XXX the test for span.y > 0 _shouldn't_ be needed but                * it fixes a problem on 64-bit Opterons (bug 4842).                */               if (span.end > 0 && span.y >= 0) {                  const GLint len = span.end - 1;                  (void) len;#ifdef INTERP_RGB                  CLAMP_INTERPOLANT(red, redStep, len);                  CLAMP_INTERPOLANT(green, greenStep, len);                  CLAMP_INTERPOLANT(blue, blueStep, len);#endif#ifdef INTERP_ALPHA                  CLAMP_INTERPOLANT(alpha, alphaStep, len);#endif#ifdef INTERP_SPEC                  CLAMP_INTERPOLANT(specRed, specRedStep, len);                  CLAMP_INTERPOLANT(specGreen, specGreenStep, len);                  CLAMP_INTERPOLANT(specBlue, specBlueStep, len);#endif#ifdef INTERP_INDEX                  CLAMP_INTERPOLANT(index, indexStep, len);#endif                  {                     RENDER_SPAN( span );                  }               }               /*                * Advance to the next scan line.  Compute the                * new edge coordinates, and adjust the                * pixel-center x coordinate so that it stays                * on or inside the major edge.                */               span.y++;               lines--;               fxLeftEdge += fdxLeftEdge;               fxRightEdge += fdxRightEdge;               fError += fdError;               if (fError >= 0) {                  fError -= INTERP_ONE;#ifdef PIXEL_ADDRESS                  pRow = (PIXEL_TYPE *) ((GLubyte *) pRow + dPRowOuter);#endif#ifdef INTERP_Z#  ifdef DEPTH_TYPE                  zRow = (DEPTH_TYPE *) ((GLubyte *) zRow + dZRowOuter);#  endif                  zLeft += fdzOuter;#endif#ifdef INTERP_W                  wLeft += dwOuter;#endif#ifdef INTERP_FOG                  fogLeft += dfogOuter;#endif#ifdef INTERP_RGB                  rLeft += fdrOuter;                  gLeft += fdgOuter;                  bLeft += fdbOuter;#endif#ifdef INTERP_ALPHA                  aLeft += fdaOuter;#endif#ifdef INTERP_SPEC                  srLeft += dsrOuter;                  sgLeft += dsgOuter;                  sbLeft += dsbOuter;#endif#ifdef INTERP_INDEX                  iLeft += diOuter;#endif#ifdef INTERP_INT_TEX                  sLeft += dsOuter;                  tLeft += dtOuter;#endif#ifdef INTERP_TEX                  TEX_UNIT_LOOP(                     sLeft[u] += dsOuter[u];                     tLeft[u] += dtOuter[u];                     uLeft[u] += duOuter[u];                     vLeft[u] += dvOuter[u];                  )#endif               }               else {#ifdef PIXEL_ADDRESS                  pRow = (PIXEL_TYPE *) ((GLubyte *) pRow + dPRowInner);#endif#ifdef INTERP_Z#  ifdef DEPTH_TYPE                  zRow = (DEPTH_TYPE *) ((GLubyte *) zRow + dZRowInner);#  endif                  zLeft += fdzInner;#endif#ifdef INTERP_W                  wLeft += dwInner;#endif#ifdef INTERP_FOG                  fogLeft += dfogInner;#endif#ifdef INTERP_RGB                  rLeft += fdrInner;                  gLeft += fdgInner;                  bLeft += fdbInner;#endif#ifdef INTERP_ALPHA                  aLeft += fdaInner;#endif#ifdef INTERP_SPEC                  srLeft += dsrInner;                  sgLeft += dsgInner;                  sbLeft += dsbInner;#endif#ifdef INTERP_INDEX                  iLeft += diInner;#endif#ifdef INTERP_INT_TEX                  sLeft += dsInner;                  tLeft += dtInner;#endif#ifdef INTERP_TEX                  TEX_UNIT_LOOP(                     sLeft[u] += dsInner[u];                     tLeft[u] += dtInner[u];                     uLeft[u] += duInner[u];                     vLeft[u] += dvInner[u];                  )#endif               }            } /*while lines>0*/         } /* for subTriangle */      }#ifdef CLEANUP_CODE      CLEANUP_CODE#endif   }}#undef SETUP_CODE#undef CLEANUP_CODE#undef RENDER_SPAN#undef PIXEL_TYPE#undef BYTES_PER_ROW#undef PIXEL_ADDRESS#undef DEPTH_TYPE#undef INTERP_Z#undef INTERP_W#undef INTERP_FOG#undef INTERP_RGB#undef INTERP_ALPHA#undef INTERP_SPEC#undef INTERP_INDEX#undef INTERP_INT_TEX#undef INTERP_TEX#undef INTERP_MULTITEX#undef TEX_UNIT_LOOP#undef S_SCALE#undef T_SCALE#undef FixedToDepth#undef ColorTemp#undef GLinterp#undef InterpToInt#undef INTERP_ONE#undef NAME

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -