Ignore:
Timestamp:
May 23, 2000, 10:35:01 PM (25 years ago)
Author:
jeroen
Message:

* empty log message *

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/opengl/mesa/linetemp.h

    r2938 r3597  
    1 /* $Id: linetemp.h,v 1.1 2000-02-29 00:48:32 sandervl Exp $ */
     1/* $Id: linetemp.h,v 1.2 2000-05-23 20:34:52 jeroen Exp $ */
    22
    33/*
     
    5353 *                          Y==0 at bottom of screen and increases upward.
    5454 *
     55 * Similarly, for direct depth buffer access, this type is used for depth
     56 * buffer addressing:
     57 *    DEPTH_TYPE          - either GLushort or GLuint
     58 *
    5559 * Optionally, one may provide one-time setup code
    5660 *    SETUP_CODE    - code which is to be executed once per line
     
    8286   GLint y1 = (GLint) VB->Win.data[vert1][1];
    8387   GLint dx, dy;
    84 #if INTERP_XY
     88#ifdef INTERP_XY
    8589   GLint xstep, ystep;
    8690#endif
    87 #if INTERP_Z
    88    GLint z0, z1, dz, zPtrXstep, zPtrYstep;
    89    GLdepth *zPtr;
    90 #endif
    91 #if INTERP_RGB
     91#ifdef INTERP_Z
     92   GLint z0, z1, dz;
     93   const GLint depthBits = ctx->Visual->DepthBits;
     94   const GLint fixedToDepthShift = depthBits <= 16 ? FIXED_SHIFT : 0;
     95#  define FixedToDepth(F)  ((F) >> fixedToDepthShift)
     96#  ifdef DEPTH_TYPE
     97     GLint zPtrXstep, zPtrYstep;
     98     DEPTH_TYPE *zPtr;
     99#  endif
     100#endif
     101#ifdef INTERP_RGB
    92102   GLfixed r0 = IntToFixed(VB->ColorPtr->data[vert0][0]);
    93103   GLfixed dr = IntToFixed(VB->ColorPtr->data[vert1][0]) - r0;
     
    97107   GLfixed db = IntToFixed(VB->ColorPtr->data[vert1][2]) - b0;
    98108#endif
    99 #if INTERP_SPEC
     109#ifdef INTERP_SPEC
    100110   GLfixed sr0 = VB->Specular ? IntToFixed(VB->Specular[vert0][0]) : 0;
    101111   GLfixed dsr = VB->Specular ? IntToFixed(VB->Specular[vert1][0]) - sr0 : 0;
     
    105115   GLfixed dsb = VB->Specular ? IntToFixed(VB->Specular[vert1][2]) - sb0 : 0;
    106116#endif
    107 #if INTERP_ALPHA
     117#ifdef INTERP_ALPHA
    108118   GLfixed a0 = IntToFixed(VB->ColorPtr->data[vert0][3]);
    109119   GLfixed da = IntToFixed(VB->ColorPtr->data[vert1][3]) - a0;
    110120#endif
    111 #if INTERP_INDEX
     121#ifdef INTERP_INDEX
    112122   GLint i0 = VB->IndexPtr->data[vert0] << 8;
    113    GLint di = (GLint) (VB->IndexPtr->data[vert1] << 8)-i0;
    114 #endif
    115 #if INTERP_ST
     123   GLint di = (GLint) (VB->IndexPtr->data[vert1] << 8) - i0;
     124#endif
     125#ifdef INTERP_ST
    116126   GLfixed s0 = FloatToFixed(VB->TexCoord[vert0][0] * S_SCALE);
    117127   GLfixed ds = FloatToFixed(VB->TexCoord[vert1][0] * S_SCALE) - s0;
     
    119129   GLfixed dt = FloatToFixed(VB->TexCoord[vert1][1] * T_SCALE) - t0;
    120130#endif
    121 #if INTERP_STUV0 || INTERP_STUV1
     131#if defined(INTERP_STUV0) || defined(INTERP_STUV1)
    122132   GLfloat invw0 = VB->Win.data[vert0][3];
    123133   GLfloat invw1 = VB->Win.data[vert1][3];
    124134#endif
    125 #if INTERP_STUV0
     135#ifdef INTERP_STUV0
    126136   /* h denotes hyperbolic */
    127137   GLfloat hs0 = invw0 * VB->TexCoordPtr[0]->data[vert0][0];
     
    132142   GLfloat hv0 = invw0, dhv = invw1 - invw0;
    133143#endif
    134 #if INTERP_STUV1
     144#ifdef INTERP_STUV1
    135145   GLfloat hs01 = invw0 * VB->TexCoordPtr[1]->data[vert0][0];
    136146   GLfloat dhs1 = invw1 * VB->TexCoordPtr[1]->data[vert1][0] - hs01;
     
    144154   GLint pixelXstep, pixelYstep;
    145155#endif
    146 #if WIDE
     156#ifdef WIDE
    147157   /* for wide lines, draw all X in [x+min, x+max] or Y in [y+min, y+max] */
    148158   GLint width, min, max;
     
    151161   max = min + width - 1;
    152162#endif
    153 #if INTERP_STUV0
     163#ifdef INTERP_STUV0
    154164   if (VB->TexCoordPtr[0]->size > 2) {
    155165      hu0 = invw0 * VB->TexCoordPtr[0]->data[vert0][2];
    156166      dhu = invw1 * VB->TexCoordPtr[0]->data[vert1][2] - hu0;
    157167      if (VB->TexCoordPtr[0]->size > 3) {
    158         hv0 = invw0 * VB->TexCoordPtr[0]->data[vert0][3];
    159         dhv = invw1 * VB->TexCoordPtr[0]->data[vert1][3] - hv0;
    160       }
    161    }
    162 #endif
    163 #if INTERP_STUV1
     168        hv0 = invw0 * VB->TexCoordPtr[0]->data[vert0][3];
     169        dhv = invw1 * VB->TexCoordPtr[0]->data[vert1][3] - hv0;
     170      }
     171   }
     172#endif
     173#ifdef INTERP_STUV1
    164174   if (VB->TexCoordPtr[1]->size > 2) {
    165175      hu01 = invw0 * VB->TexCoordPtr[1]->data[vert0][2];
    166176      dhu1 = invw1 * VB->TexCoordPtr[1]->data[vert1][2] - hu01;
    167177      if (VB->TexCoordPtr[1]->size > 3) {
    168         hv01 = invw0 * VB->TexCoordPtr[1]->data[vert0][3];
    169         dhv1 = invw1 * VB->TexCoordPtr[1]->data[vert1][3] - hv01;
     178        hv01 = invw0 * VB->TexCoordPtr[1]->data[vert0][3];
     179        dhv1 = invw1 * VB->TexCoordPtr[1]->data[vert1][3] - hv01;
    170180      }
    171181   }
     
    179189 * necessary.
    180190 */
    181 #if CLIP_HACK
     191#ifdef CLIP_HACK
    182192   {
    183       GLint w = ctx->Buffer->Width;
    184       GLint h = ctx->Buffer->Height;
     193      GLint w = ctx->DrawBuffer->Width;
     194      GLint h = ctx->DrawBuffer->Height;
    185195      if ((x0==w) | (x1==w)) {
    186196         if ((x0==w) & (x1==w))
     
    210220#endif
    211221
    212 #if INTERP_Z
    213    zPtr = Z_ADDRESS(ctx,x0,y0);
    214 #  if DEPTH_BITS==16
     222#ifdef INTERP_Z
     223#  ifdef DEPTH_TYPE
     224     zPtr = (DEPTH_TYPE *) _mesa_zbuffer_address(ctx, x0, y0);
     225#  endif
     226   if (depthBits <= 16) {
    215227      z0 = FloatToFixed(VB->Win.data[vert0][2]);
    216228      z1 = FloatToFixed(VB->Win.data[vert1][2]);
    217 #  else
     229   }
     230   else {
    218231      z0 = (int) VB->Win.data[vert0][2];
    219232      z1 = (int) VB->Win.data[vert1][2];
    220 #  endif
     233   }
    221234#endif
    222235#ifdef PIXEL_ADDRESS
     
    225238
    226239   if (dx<0) {
    227       dx = -dx;   /* make positive */
    228 #if INTERP_XY
     240      dx = -dx;                                            /* make positive*/
     241#ifdef INTERP_XY
    229242      xstep = -1;
    230243#endif
    231 #ifdef INTERP_Z
    232       zPtrXstep = -((GLint)sizeof(GLdepth));
     244#if defined(INTERP_Z) && defined(DEPTH_TYPE)
     245      zPtrXstep = -((GLint)sizeof(DEPTH_TYPE));
    233246#endif
    234247#ifdef PIXEL_ADDRESS
     
    237250   }
    238251   else {
    239 #if INTERP_XY
     252#ifdef INTERP_XY
    240253      xstep = 1;
    241254#endif
    242 #if INTERP_Z
    243       zPtrXstep = ((GLint)sizeof(GLdepth));
     255#if defined(INTERP_Z) && defined(DEPTH_TYPE)
     256      zPtrXstep = ((GLint)sizeof(DEPTH_TYPE));
    244257#endif
    245258#ifdef PIXEL_ADDRESS
     
    249262
    250263   if (dy<0) {
    251       dy = -dy;   /* make positive */
    252 #if INTERP_XY
     264      dy = -dy;                                            /* make positive*/
     265#ifdef INTERP_XY
    253266      ystep = -1;
    254267#endif
    255 #if INTERP_Z
    256       zPtrYstep = -ctx->Buffer->Width * ((GLint)sizeof(GLdepth));
     268#if defined(INTERP_Z) && defined(DEPTH_TYPE)
     269      zPtrYstep = -ctx->DrawBuffer->Width * ((GLint)sizeof(DEPTH_TYPE));
    257270#endif
    258271#ifdef PIXEL_ADDRESS
     
    261274   }
    262275   else {
    263 #if INTERP_XY
     276#ifdef INTERP_XY
    264277      ystep = 1;
    265278#endif
    266 #if INTERP_Z
    267       zPtrYstep = ctx->Buffer->Width * ((GLint)sizeof(GLdepth));
     279#if defined(INTERP_Z) && defined(DEPTH_TYPE)
     280      zPtrYstep = ctx->DrawBuffer->Width * ((GLint)sizeof(DEPTH_TYPE));
    268281#endif
    269282#ifdef PIXEL_ADDRESS
     
    282295      GLint error = errorInc-dx;
    283296      GLint errorDec = error-dx;
    284 #if INTERP_Z
     297#ifdef INTERP_Z
    285298      dz = (z1-z0) / dx;
    286299#endif
    287 #if INTERP_RGB
    288       dr /= dx;   /* convert from whole line delta to per-pixel delta */
     300#ifdef INTERP_RGB
     301      dr /= dx;         /* convert from whole line delta to per-pixel delta*/
    289302      dg /= dx;
    290303      db /= dx;
    291304#endif
    292 #if INTERP_SPEC
    293       dsr /= dx;   /* convert from whole line delta to per-pixel delta */
     305#ifdef INTERP_SPEC
     306      dsr /= dx;        /* convert from whole line delta to per-pixel delta*/
    294307      dsg /= dx;
    295308      dsb /= dx;
    296309#endif
    297 #if INTERP_ALPHA
     310#ifdef INTERP_ALPHA
    298311      da /= dx;
    299312#endif
    300 #if INTERP_INDEX
     313#ifdef INTERP_INDEX
    301314      di /= dx;
    302315#endif
    303 #if INTERP_ST
     316#ifdef INTERP_ST
    304317      ds /= dx;
    305318      dt /= dx;
    306319#endif
    307 #if INTERP_STUV0
     320#ifdef INTERP_STUV0
    308321      {
    309322         GLfloat invDx = 1.0F / (GLfloat) dx;
     
    314327      }
    315328#endif
    316 #if INTERP_STUV1
     329#ifdef INTERP_STUV1
    317330      {
    318331         GLfloat invDx = 1.0F / (GLfloat) dx;
     
    324337#endif
    325338      for (i=0;i<dx;i++) {
    326 #if STIPPLE
     339#ifdef STIPPLE
    327340         GLushort m;
    328341         m = 1 << ((ctx->StippleCounter/ctx->Line.StippleFactor) & 0xf);
    329342         if (ctx->Line.StipplePattern & m) {
    330343#endif
    331 #if INTERP_Z
    332 #  if DEPTH_BITS==16
    333             GLdepth Z = FixedToInt(z0);
    334 #  else
    335             GLdepth Z = z0;
    336 #  endif
    337 #endif
    338 #if INTERP_INDEX
     344#ifdef INTERP_Z
     345            GLdepth Z = FixedToDepth(z0);
     346#endif
     347#ifdef INTERP_INDEX
    339348            GLint I = i0 >> 8;
    340349#endif
    341 #if INTERP_STUV0
     350#ifdef INTERP_STUV0
    342351            GLfloat invQ = 1.0F / hv0;
    343352            GLfloat s = hs0 * invQ;
     
    345354            GLfloat u = hu0 * invQ;
    346355#endif
    347 #if INTERP_STUV1
     356#ifdef INTERP_STUV1
    348357            GLfloat invQ1 = 1.0F / hv01;
    349358            GLfloat s1 = hs01 * invQ1;
     
    351360            GLfloat u1 = hu01 * invQ1;
    352361#endif
    353 #if WIDE
     362#ifdef WIDE
    354363            GLint yy;
    355364            GLint ymin = y0 + min;
     
    364373            PLOT( x0, y0 );
    365374#  endif
    366 #endif /*WIDE*/
    367 #if STIPPLE
     375#endif                                 /* WIDE                             */
     376#ifdef STIPPLE
    368377        }
    369         ctx->StippleCounter++;
    370 #endif
    371 #if INTERP_XY
     378        ctx->StippleCounter++;
     379#endif
     380#ifdef INTERP_XY
    372381         x0 += xstep;
    373382#endif
    374 #if INTERP_Z
    375          zPtr = (GLdepth *) ((GLubyte*) zPtr + zPtrXstep);
     383#ifdef INTERP_Z
     384#  ifdef DEPTH_TYPE
     385         zPtr = (DEPTH_TYPE *) ((GLubyte*) zPtr + zPtrXstep);
     386#  endif
    376387         z0 += dz;
    377388#endif
    378 #if INTERP_RGB
     389#ifdef INTERP_RGB
    379390         r0 += dr;
    380391         g0 += dg;
    381392         b0 += db;
    382393#endif
    383 #if INTERP_SPEC
     394#ifdef INTERP_SPEC
    384395         sr0 += dsr;
    385396         sg0 += dsg;
    386397         sb0 += dsb;
    387398#endif
    388 #if INTERP_ALPHA
     399#ifdef INTERP_ALPHA
    389400         a0 += da;
    390401#endif
    391 #if INTERP_INDEX
     402#ifdef INTERP_INDEX
    392403         i0 += di;
    393404#endif
    394 #if INTERP_ST
     405#ifdef INTERP_ST
    395406         s0 += ds;
    396407         t0 += dt;
    397408#endif
    398 #if INTERP_STUV0
     409#ifdef INTERP_STUV0
    399410         hs0 += dhs;
    400411         ht0 += dht;
     
    402413         hv0 += dhv;
    403414#endif
    404 #if INTERP_STUV1
     415#ifdef INTERP_STUV1
    405416         hs01 += dhs1;
    406417         ht01 += dht1;
     
    416427         else {
    417428            error += errorDec;
    418 #if INTERP_XY
     429#ifdef INTERP_XY
    419430            y0 += ystep;
    420431#endif
    421 #if INTERP_Z
    422             zPtr = (GLdepth *) ((GLubyte*) zPtr + zPtrYstep);
     432#if defined(INTERP_Z) && defined(DEPTH_TYPE)
     433            zPtr = (DEPTH_TYPE *) ((GLubyte*) zPtr + zPtrYstep);
    423434#endif
    424435#ifdef PIXEL_ADDRESS
     
    434445      GLint error = errorInc-dy;
    435446      GLint errorDec = error-dy;
    436 #if INTERP_Z
     447#ifdef INTERP_Z
    437448      dz = (z1-z0) / dy;
    438449#endif
    439 #if INTERP_RGB
    440       dr /= dy;   /* convert from whole line delta to per-pixel delta */
     450#ifdef INTERP_RGB
     451      dr /= dy;         /* convert from whole line delta to per-pixel delta*/
    441452      dg /= dy;
    442453      db /= dy;
    443454#endif
    444 #if INTERP_SPEC
    445       dsr /= dy;   /* convert from whole line delta to per-pixel delta */
     455#ifdef INTERP_SPEC
     456      dsr /= dy;        /* convert from whole line delta to per-pixel delta*/
    446457      dsg /= dy;
    447458      dsb /= dy;
    448459#endif
    449 #if INTERP_ALPHA
     460#ifdef INTERP_ALPHA
    450461      da /= dy;
    451462#endif
    452 #if INTERP_INDEX
     463#ifdef INTERP_INDEX
    453464      di /= dy;
    454465#endif
    455 #if INTERP_ST
     466#ifdef INTERP_ST
    456467      ds /= dy;
    457468      dt /= dy;
    458469#endif
    459 #if INTERP_STUV0
     470#ifdef INTERP_STUV0
    460471      {
    461472         GLfloat invDy = 1.0F / (GLfloat) dy;
     
    466477      }
    467478#endif
    468 #if INTERP_STUV1
     479#ifdef INTERP_STUV1
    469480      {
    470481         GLfloat invDy = 1.0F / (GLfloat) dy;
     
    476487#endif
    477488      for (i=0;i<dy;i++) {
    478 #if STIPPLE
     489#ifdef STIPPLE
    479490         GLushort m;
    480491         m = 1 << ((ctx->StippleCounter/ctx->Line.StippleFactor) & 0xf);
    481492         if (ctx->Line.StipplePattern & m) {
    482493#endif
    483 #if INTERP_Z
    484 #  if DEPTH_BITS==16
    485             GLdepth Z = FixedToInt(z0);
    486 #  else
    487             GLdepth Z = z0;
    488 #  endif
    489 #endif
    490 #if INTERP_INDEX
     494#ifdef INTERP_Z
     495            GLdepth Z = FixedToDepth(z0);
     496#endif
     497#ifdef INTERP_INDEX
    491498            GLint I = i0 >> 8;
    492499#endif
    493 #if INTERP_STUV0
     500#ifdef INTERP_STUV0
    494501            GLfloat invQ = 1.0F / hv0;
    495502            GLfloat s = hs0 * invQ;
     
    497504            GLfloat u = hu0 * invQ;
    498505#endif
    499 #if INTERP_STUV1
     506#ifdef INTERP_STUV1
    500507            GLfloat invQ1 = 1.0F / hv01;
    501508            GLfloat s1 = hs01 * invQ1;
     
    503510            GLfloat u1 = hu01 * invQ1;
    504511#endif
    505 #if WIDE
     512#ifdef WIDE
    506513            GLint xx;
    507514            GLint xmin = x0 + min;
     
    516523            PLOT( x0, y0 );
    517524#  endif
    518 #endif /*WIDE*/
    519 #if STIPPLE
     525#endif                                 /* WIDE                             */
     526#ifdef STIPPLE
    520527        }
    521         ctx->StippleCounter++;
    522 #endif
    523 #if INTERP_XY
     528        ctx->StippleCounter++;
     529#endif
     530#ifdef INTERP_XY
    524531         y0 += ystep;
    525532#endif
    526 #if INTERP_Z
    527          zPtr = (GLdepth *) ((GLubyte*) zPtr + zPtrYstep);
     533#ifdef INTERP_Z
     534#  ifdef DEPTH_TYPE
     535         zPtr = (DEPTH_TYPE *) ((GLubyte*) zPtr + zPtrYstep);
     536#  endif
    528537         z0 += dz;
    529538#endif
    530 #if INTERP_RGB
     539#ifdef INTERP_RGB
    531540         r0 += dr;
    532541         g0 += dg;
    533542         b0 += db;
    534543#endif
    535 #if INTERP_SPEC
     544#ifdef INTERP_SPEC
    536545         sr0 += dsr;
    537546         sg0 += dsg;
    538547         sb0 += dsb;
    539548#endif
    540 #if INTERP_ALPHA
     549#ifdef INTERP_ALPHA
    541550         a0 += da;
    542551#endif
    543 #if INTERP_INDEX
     552#ifdef INTERP_INDEX
    544553         i0 += di;
    545554#endif
    546 #if INTERP_ST
     555#ifdef INTERP_ST
    547556         s0 += ds;
    548557         t0 += dt;
    549558#endif
    550 #if INTERP_STUV0
     559#ifdef INTERP_STUV0
    551560         hs0 += dhs;
    552561         ht0 += dht;
     
    554563         hv0 += dhv;
    555564#endif
    556 #if INTERP_STUV1
     565#ifdef INTERP_STUV1
    557566         hs01 += dhs1;
    558567         ht01 += dht1;
     
    568577         else {
    569578            error += errorDec;
    570 #if INTERP_XY
     579#ifdef INTERP_XY
    571580            x0 += xstep;
    572581#endif
    573 #if INTERP_Z
    574             zPtr = (GLdepth *) ((GLubyte*) zPtr + zPtrXstep);
     582#if defined(INTERP_Z) && defined(DEPTH_TYPE)
     583            zPtr = (DEPTH_TYPE *) ((GLubyte*) zPtr + zPtrXstep);
    575584#endif
    576585#ifdef PIXEL_ADDRESS
     
    594603#undef PIXEL_ADDRESS
    595604#undef PIXEL_TYPE
     605#undef DEPTH_TYPE
    596606#undef BYTES_PER_ROW
    597607#undef SETUP_CODE
     
    602612#undef STIPPLE
    603613#undef WIDE
     614#undef FixedToDepth
Note: See TracChangeset for help on using the changeset viewer.