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

* empty log message *

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/opengl/mesa/triangle.c

    r2962 r3598  
    1 /* $Id: triangle.c,v 1.2 2000-03-01 18:49:38 jeroen Exp $ */
     1/* $Id: triangle.c,v 1.3 2000-05-23 20:40:58 jeroen Exp $ */
    22
    33/*
    44 * Mesa 3-D graphics library
    5  * Version:  3.1
     5 * Version:  3.3
    66 *
    77 * Copyright (C) 1999  Brian Paul   All Rights Reserved.
     
    3838#include "all.h"
    3939#else
    40 #ifndef XFree86Server
    41 #include <assert.h>
    42 #include <math.h>
    43 #include <stdio.h>
    44 #else
    45 #include "GL/xf86glx.h"
    46 #endif
     40#include "glheader.h"
     41#include "aatriangle.h"
    4742#include "types.h"
    4843#include "context.h"
     
    5550#include "triangle.h"
    5651#include "vb.h"
     52#include "mem.h"
    5753#endif
    5854
     
    8783{
    8884#define INTERP_Z 1
    89 
    90 #define SETUP_CODE                              \
    91    GLuint index = VB->IndexPtr->data[pv];       \
    92    if (1) {                                     \
    93       /* set the color index */                 \
    94       (*ctx->Driver.Index)( ctx, index );       \
     85#define SETUP_CODE                              \
     86   GLuint index = VB->IndexPtr->data[pv];       \
     87   if (1) {                                     \
     88      /* set the color index */                 \
     89      (*ctx->Driver.Index)( ctx, index );       \
    9590   }
    9691
    97 #define INNER_LOOP( LEFT, RIGHT, Y )                            \
    98         {                                                       \
    99            GLint i, n = RIGHT-LEFT;                             \
    100            GLdepth zspan[MAX_WIDTH];                            \
    101            if (n>0) {                                           \
    102               for (i=0;i<n;i++) {                               \
    103                  zspan[i] = FixedToDepth(ffz);                  \
    104                  ffz += fdzdx;                                  \
    105               }                                                 \
    106               gl_write_monoindex_span( ctx, n, LEFT, Y,         \
    107                                     zspan, index, GL_POLYGON ); \
    108            }                                                    \
    109         }
    110 
    111 #include "tritemp.h"   
     92#define INNER_LOOP( LEFT, RIGHT, Y )                            \
     93        {                                                       \
     94           GLint i, n = RIGHT-LEFT;                             \
     95           GLdepth zspan[MAX_WIDTH];                            \
     96           if (n>0) {                                           \
     97              for (i=0;i<n;i++) {                               \
     98                 zspan[i] = FixedToDepth(ffz);                  \
     99                 ffz += fdzdx;                                  \
     100              }                                                 \
     101              gl_write_monoindex_span( ctx, n, LEFT, Y,         \
     102                                    zspan, index, GL_POLYGON ); \
     103           }                                                    \
     104        }
     105
     106#include "tritemp.h"
    112107}
    113108
     
    124119#define INTERP_INDEX 1
    125120
    126 #define INNER_LOOP( LEFT, RIGHT, Y )                            \
    127         {                                                       \
    128            GLint i, n = RIGHT-LEFT;                             \
    129            GLdepth zspan[MAX_WIDTH];                            \
    130            GLuint index[MAX_WIDTH];                             \
    131            if (n>0) {                                           \
    132               for (i=0;i<n;i++) {                               \
    133                  zspan[i] = FixedToDepth(ffz);                  \
    134                  index[i] = FixedToInt(ffi);                    \
    135                  ffz += fdzdx;                                  \
    136                  ffi += fdidx;                                  \
    137               }                                                 \
    138               gl_write_index_span( ctx, n, LEFT, Y, zspan,      \
    139                                    index, GL_POLYGON );         \
    140            }                                                    \
    141         }
     121#define INNER_LOOP( LEFT, RIGHT, Y )                            \
     122        {                                                       \
     123           GLint i, n = RIGHT-LEFT;                             \
     124           GLdepth zspan[MAX_WIDTH];                            \
     125           GLuint index[MAX_WIDTH];                             \
     126           if (n>0) {                                           \
     127              for (i=0;i<n;i++) {                               \
     128                 zspan[i] = FixedToDepth(ffz);                  \
     129                 index[i] = FixedToInt(ffi);                    \
     130                 ffz += fdzdx;                                  \
     131                 ffi += fdidx;                                  \
     132              }                                                 \
     133              gl_write_index_span( ctx, n, LEFT, Y, zspan,      \
     134                                   index, GL_POLYGON );         \
     135           }                                                    \
     136        }
    142137
    143138#include "tritemp.h"
     
    153148{
    154149#define INTERP_Z 1
    155 
    156 #define SETUP_CODE                              \
    157    if (1) {                                     \
    158       /* set the color */                       \
    159       GLubyte r = VB->ColorPtr->data[pv][0];    \
    160       GLubyte g = VB->ColorPtr->data[pv][1];    \
    161       GLubyte b = VB->ColorPtr->data[pv][2];    \
    162       GLubyte a = VB->ColorPtr->data[pv][3];    \
    163       (*ctx->Driver.Color)( ctx, r, g, b, a );  \
     150#define DEPTH_TYPE DEFAULT_SOFTWARE_DEPTH_TYPE
     151
     152#define SETUP_CODE                              \
     153   if (1) {                                     \
     154      /* set the color */                       \
     155      GLubyte r = VB->ColorPtr->data[pv][0];    \
     156      GLubyte g = VB->ColorPtr->data[pv][1];    \
     157      GLubyte b = VB->ColorPtr->data[pv][2];    \
     158      GLubyte a = VB->ColorPtr->data[pv][3];    \
     159      (*ctx->Driver.Color)( ctx, r, g, b, a );  \
    164160   }
    165161
    166 #define INNER_LOOP( LEFT, RIGHT, Y )                            \
    167         {                                                       \
    168            GLint i, n = RIGHT-LEFT;                             \
    169            GLdepth zspan[MAX_WIDTH];                            \
    170            if (n>0) {                                           \
    171               for (i=0;i<n;i++) {                               \
    172                  zspan[i] = FixedToDepth(ffz);                  \
    173                  ffz += fdzdx;                                  \
    174               }                                                 \
    175               gl_write_monocolor_span( ctx, n, LEFT, Y, zspan,  \
    176                                     VB->ColorPtr->data[pv],     \
    177                                     GL_POLYGON );               \
    178            }                                                    \
    179         }
     162#define INNER_LOOP( LEFT, RIGHT, Y )                            \
     163        {                                                       \
     164           GLint i, n = RIGHT-LEFT;                             \
     165           GLdepth zspan[MAX_WIDTH];                            \
     166           if (n>0) {                                           \
     167              for (i=0;i<n;i++) {                               \
     168                 zspan[i] = FixedToDepth(ffz);                  \
     169                 ffz += fdzdx;                                  \
     170              }                                                 \
     171              gl_write_monocolor_span( ctx, n, LEFT, Y, zspan,  \
     172                                       VB->ColorPtr->data[pv],  \
     173                                       GL_POLYGON );            \
     174           }                                                    \
     175        }
    180176
    181177#include "tritemp.h"
    182178
    183    ASSERT(!ctx->Texture.ReallyEnabled);  /* texturing must be off */
     179   ASSERT(!ctx->Texture.ReallyEnabled);            /* texturing must be off*/
    184180   ASSERT(ctx->Light.ShadeModel==GL_FLAT);
    185181}
     
    195191   (void) pv;
    196192#define INTERP_Z 1
     193#define DEPTH_TYPE DEFAULT_SOFTWARE_DEPTH_TYPE
    197194#define INTERP_RGB 1
    198195#define INTERP_ALPHA 1
    199196
    200 #define INNER_LOOP( LEFT, RIGHT, Y )                            \
    201         {                                                       \
    202            GLint i, n = RIGHT-LEFT;                             \
    203            GLdepth zspan[MAX_WIDTH];                            \
    204            GLubyte rgba[MAX_WIDTH][4];                          \
    205            if (n>0) {                                           \
    206               for (i=0;i<n;i++) {                               \
    207                  zspan[i] = FixedToDepth(ffz);                  \
    208                  rgba[i][RCOMP] = FixedToInt(ffr);              \
    209                  rgba[i][GCOMP] = FixedToInt(ffg);              \
    210                  rgba[i][BCOMP] = FixedToInt(ffb);              \
    211                  rgba[i][ACOMP] = FixedToInt(ffa);              \
    212                  ffz += fdzdx;                                  \
    213                  ffr += fdrdx;                                  \
    214                  ffg += fdgdx;                                  \
    215                  ffb += fdbdx;                                  \
    216                  ffa += fdadx;                                  \
    217               }                                                 \
    218               gl_write_rgba_span( ctx, n, LEFT, Y,              \
    219                                   (const GLdepth *) zspan,      \
    220                                   rgba, GL_POLYGON );           \
    221            }                                                    \
    222         }
     197#define INNER_LOOP( LEFT, RIGHT, Y )                            \
     198        {                                                       \
     199           GLint i, n = RIGHT-LEFT;                             \
     200           GLdepth zspan[MAX_WIDTH];                            \
     201           GLubyte rgba[MAX_WIDTH][4];                          \
     202           if (n>0) {                                           \
     203              for (i=0;i<n;i++) {                               \
     204                 zspan[i] = FixedToDepth(ffz);                  \
     205                 rgba[i][RCOMP] = FixedToInt(ffr);              \
     206                 rgba[i][GCOMP] = FixedToInt(ffg);              \
     207                 rgba[i][BCOMP] = FixedToInt(ffb);              \
     208                 rgba[i][ACOMP] = FixedToInt(ffa);              \
     209                 ffz += fdzdx;                                  \
     210                 ffr += fdrdx;                                  \
     211                 ffg += fdgdx;                                  \
     212                 ffb += fdbdx;                                  \
     213                 ffa += fdadx;                                  \
     214              }                                                 \
     215              gl_write_rgba_span( ctx, n, LEFT, Y,              \
     216                                  (const GLdepth *) zspan,      \
     217                                  rgba, GL_POLYGON );           \
     218           }                                                    \
     219        }
    223220
    224221#include "tritemp.h"
     
    239236#define S_SCALE twidth
    240237#define T_SCALE theight
    241 #define SETUP_CODE                                                      \
    242    struct gl_texture_object *obj = ctx->Texture.Unit[0].CurrentD[2];    \
    243    GLint b = obj->BaseLevel;                                            \
    244    GLfloat twidth = (GLfloat) obj->Image[b]->Width;                     \
    245    GLfloat theight = (GLfloat) obj->Image[b]->Height;                   \
    246    GLint twidth_log2 = obj->Image[b]->WidthLog2;                        \
    247    GLubyte *texture = obj->Image[b]->Data;                              \
    248    GLint smask = obj->Image[b]->Width - 1;                              \
     238#define SETUP_CODE                                                      \
     239   struct gl_texture_object *obj = ctx->Texture.Unit[0].CurrentD[2];    \
     240   GLint b = obj->BaseLevel;                                            \
     241   GLfloat twidth = (GLfloat) obj->Image[b]->Width;                     \
     242   GLfloat theight = (GLfloat) obj->Image[b]->Height;                   \
     243   GLint twidth_log2 = obj->Image[b]->WidthLog2;                        \
     244   GLubyte *texture = obj->Image[b]->Data;                              \
     245   GLint smask = obj->Image[b]->Width - 1;                              \
    249246   GLint tmask = obj->Image[b]->Height - 1;
    250247   (void) pv;
    251248
    252 #define INNER_LOOP( LEFT, RIGHT, Y )                            \
    253         {                                                       \
    254            GLint i, n = RIGHT-LEFT;                             \
    255            GLubyte rgb[MAX_WIDTH][3];                           \
    256            if (n>0) {                                           \
     249#define INNER_LOOP( LEFT, RIGHT, Y )                            \
     250        {                                                       \
     251           GLint i, n = RIGHT-LEFT;                             \
     252           GLubyte rgb[MAX_WIDTH][3];                           \
     253           if (n>0) {                                           \
    257254              ffs -= FIXED_HALF; /* off-by-one error? */        \
    258255              fft -= FIXED_HALF;                                \
    259               for (i=0;i<n;i++) {                               \
    260                  GLint s = FixedToInt(ffs) & smask;             \
    261                  GLint t = FixedToInt(fft) & tmask;             \
    262                  GLint pos = (t << twidth_log2) + s;            \
    263                  pos = pos + pos + pos;  /* multiply by 3 */    \
    264                  rgb[i][RCOMP] = texture[pos];                  \
    265                  rgb[i][GCOMP] = texture[pos+1];                \
    266                  rgb[i][BCOMP] = texture[pos+2];                \
    267                  ffs += fdsdx;                                  \
    268                  fft += fdtdx;                                  \
    269               }                                                 \
    270               (*ctx->Driver.WriteRGBSpan)( ctx, n, LEFT, Y,     \
    271                            (const GLubyte (*)[3]) rgb, NULL );  \
    272            }                                                    \
    273         }
     256              for (i=0;i<n;i++) {                               \
     257                 GLint s = FixedToInt(ffs) & smask;             \
     258                 GLint t = FixedToInt(fft) & tmask;             \
     259                 GLint pos = (t << twidth_log2) + s;            \
     260                 pos = pos + pos + pos;  /* multiply by 3 */    \
     261                 rgb[i][RCOMP] = texture[pos];                  \
     262                 rgb[i][GCOMP] = texture[pos+1];                \
     263                 rgb[i][BCOMP] = texture[pos+2];                \
     264                 ffs += fdsdx;                                  \
     265                 fft += fdtdx;                                  \
     266              }                                                 \
     267              (*ctx->Driver.WriteRGBSpan)( ctx, n, LEFT, Y,     \
     268                           (const GLubyte (*)[3]) rgb, NULL );  \
     269           }                                                    \
     270        }
    274271
    275272#include "tritemp.h"
     
    286283{
    287284#define INTERP_Z 1
     285#define DEPTH_TYPE DEFAULT_SOFTWARE_DEPTH_TYPE
    288286#define INTERP_INT_ST 1
    289287#define S_SCALE twidth
    290288#define T_SCALE theight
    291 #define SETUP_CODE                                                      \
    292    struct gl_texture_object *obj = ctx->Texture.Unit[0].CurrentD[2];    \
    293    GLint b = obj->BaseLevel;                                            \
    294    GLfloat twidth = (GLfloat) obj->Image[b]->Width;                     \
    295    GLfloat theight = (GLfloat) obj->Image[b]->Height;                   \
    296    GLint twidth_log2 = obj->Image[b]->WidthLog2;                        \
    297    GLubyte *texture = obj->Image[b]->Data;                              \
    298    GLint smask = obj->Image[b]->Width - 1;                              \
     289#define SETUP_CODE                                                      \
     290   struct gl_texture_object *obj = ctx->Texture.Unit[0].CurrentD[2];    \
     291   GLint b = obj->BaseLevel;                                            \
     292   GLfloat twidth = (GLfloat) obj->Image[b]->Width;                     \
     293   GLfloat theight = (GLfloat) obj->Image[b]->Height;                   \
     294   GLint twidth_log2 = obj->Image[b]->WidthLog2;                        \
     295   GLubyte *texture = obj->Image[b]->Data;                              \
     296   GLint smask = obj->Image[b]->Width - 1;                              \
    299297   GLint tmask = obj->Image[b]->Height - 1;
    300298   (void) pv;
    301299
    302 #define INNER_LOOP( LEFT, RIGHT, Y )                            \
    303         {                                                       \
    304            GLint i, n = RIGHT-LEFT;                             \
    305            GLubyte rgb[MAX_WIDTH][3];                           \
    306            GLubyte mask[MAX_WIDTH];                             \
    307            if (n>0) {                                           \
     300#define INNER_LOOP( LEFT, RIGHT, Y )                            \
     301        {                                                       \
     302           GLint i, n = RIGHT-LEFT;                             \
     303           GLubyte rgb[MAX_WIDTH][3];                           \
     304           GLubyte mask[MAX_WIDTH];                             \
     305           if (n>0) {                                           \
    308306              ffs -= FIXED_HALF; /* off-by-one error? */        \
    309307              fft -= FIXED_HALF;                                \
    310               for (i=0;i<n;i++) {                               \
    311                  GLdepth z = FixedToDepth(ffz);                 \
    312                  if (z < zRow[i]) {                             \
    313                     GLint s = FixedToInt(ffs) & smask;          \
    314                     GLint t = FixedToInt(fft) & tmask;          \
    315                     GLint pos = (t << twidth_log2) + s;         \
    316                     pos = pos + pos + pos;  /* multiply by 3 */ \
    317                     rgb[i][RCOMP] = texture[pos];               \
    318                     rgb[i][GCOMP] = texture[pos+1];             \
    319                     rgb[i][BCOMP] = texture[pos+2];             \
    320                     zRow[i] = z;                                \
    321                     mask[i] = 1;                                \
    322                  }                                              \
    323                  else {                                         \
    324                     mask[i] = 0;                                \
    325                  }                                              \
    326                  ffz += fdzdx;                                  \
    327                  ffs += fdsdx;                                  \
    328                  fft += fdtdx;                                  \
    329               }                                                 \
    330               (*ctx->Driver.WriteRGBSpan)( ctx, n, LEFT, Y,     \
    331                            (const GLubyte (*)[3]) rgb, mask );  \
    332            }                                                    \
    333         }
     308              for (i=0;i<n;i++) {                               \
     309                 GLdepth z = FixedToDepth(ffz);                 \
     310                 if (z < zRow[i]) {                             \
     311                    GLint s = FixedToInt(ffs) & smask;          \
     312                    GLint t = FixedToInt(fft) & tmask;          \
     313                    GLint pos = (t << twidth_log2) + s;         \
     314                    pos = pos + pos + pos;  /* multiply by 3 */ \
     315                    rgb[i][RCOMP] = texture[pos];               \
     316                    rgb[i][GCOMP] = texture[pos+1];             \
     317                    rgb[i][BCOMP] = texture[pos+2];             \
     318                    zRow[i] = z;                                \
     319                    mask[i] = 1;                                \
     320                 }                                              \
     321                 else {                                         \
     322                    mask[i] = 0;                                \
     323                 }                                              \
     324                 ffz += fdzdx;                                  \
     325                 ffs += fdsdx;                                  \
     326                 fft += fdtdx;                                  \
     327              }                                                 \
     328              (*ctx->Driver.WriteRGBSpan)( ctx, n, LEFT, Y,     \
     329                           (const GLubyte (*)[3]) rgb, mask );  \
     330           }                                                    \
     331        }
    334332
    335333#include "tritemp.h"
     
    342340 */
    343341static void affine_textured_triangle( GLcontext *ctx, GLuint v0, GLuint v1,
    344                                       GLuint v2, GLuint pv )
     342                                      GLuint v2, GLuint pv )
    345343{
    346344#define INTERP_Z 1
     345#define DEPTH_TYPE DEFAULT_SOFTWARE_DEPTH_TYPE
    347346#define INTERP_RGB 1
    348347#define INTERP_ALPHA 1
     
    350349#define S_SCALE twidth
    351350#define T_SCALE theight
    352 #define SETUP_CODE                                                      \
    353    struct gl_texture_unit *unit = ctx->Texture.Unit+0;                  \
    354    struct gl_texture_object *obj = unit->CurrentD[2];                   \
    355    GLint b = obj->BaseLevel;                                            \
    356    GLfloat twidth = (GLfloat) obj->Image[b]->Width;                     \
    357    GLfloat theight = (GLfloat) obj->Image[b]->Height;                   \
    358    GLint twidth_log2 = obj->Image[b]->WidthLog2;                        \
    359    GLubyte *texture = obj->Image[b]->Data;                              \
    360    GLint smask = obj->Image[b]->Width - 1;                              \
     351#define SETUP_CODE                                                      \
     352   struct gl_texture_unit *unit = ctx->Texture.Unit+0;                  \
     353   struct gl_texture_object *obj = unit->CurrentD[2];                   \
     354   GLint b = obj->BaseLevel;                                            \
     355   GLfloat twidth = (GLfloat) obj->Image[b]->Width;                     \
     356   GLfloat theight = (GLfloat) obj->Image[b]->Height;                   \
     357   GLint twidth_log2 = obj->Image[b]->WidthLog2;                        \
     358   GLubyte *texture = obj->Image[b]->Data;                              \
     359   GLint smask = obj->Image[b]->Width - 1;                              \
    361360   GLint tmask = obj->Image[b]->Height - 1;                             \
    362361   GLint format = obj->Image[b]->Format;                                \
     
    366365   GLfixed er, eg, eb, ea;                                              \
    367366   GLint tr, tg, tb, ta;                                                \
    368    if (envmode == GL_BLEND || envmode == GL_ADD) {                      \
     367   if (envmode == GL_BLEND) {                                           \
    369368      /* potential off-by-one error here? (1.0f -> 2048 -> 0) */        \
    370369      er = FloatToFixed(unit->EnvColor[0]);                             \
     
    409408
    410409#define LINEAR_RGB                                                      \
    411         tr = (ti * (si * tex00[0] + sf * tex01[0]) +                    \
     410        tr = (ti * (si * tex00[0] + sf * tex01[0]) +                    \
    412411              tf * (si * tex10[0] + sf * tex11[0])) >> 2 * FIXED_SHIFT; \
    413         tg = (ti * (si * tex00[1] + sf * tex01[1]) +                    \
     412        tg = (ti * (si * tex00[1] + sf * tex01[1]) +                    \
    414413              tf * (si * tex10[1] + sf * tex11[1])) >> 2 * FIXED_SHIFT; \
    415         tb = (ti * (si * tex00[2] + sf * tex01[2]) +                    \
     414        tb = (ti * (si * tex00[2] + sf * tex01[2]) +                    \
    416415              tf * (si * tex10[2] + sf * tex11[2])) >> 2 * FIXED_SHIFT; \
    417         ta = 0xff
     416        ta = 0xff
    418417
    419418#define NEAREST_RGBA   \
     
    424423
    425424#define LINEAR_RGBA                                                     \
    426         tr = (ti * (si * tex00[0] + sf * tex01[0]) +                    \
     425        tr = (ti * (si * tex00[0] + sf * tex01[0]) +                    \
    427426              tf * (si * tex10[0] + sf * tex11[0])) >> 2 * FIXED_SHIFT; \
    428         tg = (ti * (si * tex00[1] + sf * tex01[1]) +                    \
     427        tg = (ti * (si * tex00[1] + sf * tex01[1]) +                    \
    429428              tf * (si * tex10[1] + sf * tex11[1])) >> 2 * FIXED_SHIFT; \
    430         tb = (ti * (si * tex00[2] + sf * tex01[2]) +                    \
     429        tb = (ti * (si * tex00[2] + sf * tex01[2]) +                    \
    431430              tf * (si * tex10[2] + sf * tex11[2])) >> 2 * FIXED_SHIFT; \
    432         ta = (ti * (si * tex00[3] + sf * tex01[3]) +                    \
     431        ta = (ti * (si * tex00[3] + sf * tex01[3]) +                    \
    433432              tf * (si * tex10[3] + sf * tex11[3])) >> 2 * FIXED_SHIFT
    434433
     
    440439
    441440#define DECAL                                                                \
    442         dest[0] = ((0xff - ta) * ffr + ((ta + 1) * tr << FIXED_SHIFT)) >> (FIXED_SHIFT + 8); \
    443         dest[1] = ((0xff - ta) * ffg + ((ta + 1) * tg << FIXED_SHIFT)) >> (FIXED_SHIFT + 8); \
    444         dest[2] = ((0xff - ta) * ffb + ((ta + 1) * tb << FIXED_SHIFT)) >> (FIXED_SHIFT + 8); \
    445         dest[3] = FixedToInt(ffa)
     441        dest[0] = ((0xff - ta) * ffr + ((ta + 1) * tr << FIXED_SHIFT)) >> (FIXED_SHIFT + 8); \
     442        dest[1] = ((0xff - ta) * ffg + ((ta + 1) * tg << FIXED_SHIFT)) >> (FIXED_SHIFT + 8); \
     443        dest[2] = ((0xff - ta) * ffb + ((ta + 1) * tb << FIXED_SHIFT)) >> (FIXED_SHIFT + 8); \
     444        dest[3] = FixedToInt(ffa)
    446445
    447446#define BLEND                                                               \
     
    449448        dest[1] = ((0xff - tg) * ffg + (tg + 1) * eg) >> (FIXED_SHIFT + 8); \
    450449        dest[2] = ((0xff - tb) * ffb + (tb + 1) * eb) >> (FIXED_SHIFT + 8); \
    451         dest[3] = ffa * (ta + 1) >> (FIXED_SHIFT + 8)
     450        dest[3] = ffa * (ta + 1) >> (FIXED_SHIFT + 8)
    452451
    453452#define REPLACE       \
     
    457456        dest[3] = ta
    458457
    459 #define ADD                                                          \
    460         dest[0] = ((ffr << 8) + (tr + 1) * er) >> (FIXED_SHIFT + 8); \
    461         dest[1] = ((ffg << 8) + (tg + 1) * eg) >> (FIXED_SHIFT + 8); \
    462         dest[2] = ((ffb << 8) + (tb + 1) * eb) >> (FIXED_SHIFT + 8); \
    463         dest[3] = ffa * (ta + 1) >> (FIXED_SHIFT + 8)
    464 
    465458/* shortcuts */
    466459
     
    470463
    471464#define SPAN1(DO_TEX,COMP)                                 \
    472         for (i=0;i<n;i++) {                                \
     465        for (i=0;i<n;i++) {                                \
    473466           GLint s = FixedToInt(ffs) & smask;              \
    474467           GLint t = FixedToInt(fft) & tmask;              \
    475468           GLint pos = (t << twidth_log2) + s;             \
    476469           GLubyte *tex00 = texture + COMP * pos;          \
    477            zspan[i] = FixedToDepth(ffz);                   \
     470           zspan[i] = FixedToDepth(ffz);                   \
    478471           DO_TEX;                                         \
    479            ffz += fdzdx;                                   \
     472           ffz += fdzdx;                                   \
    480473           ffr += fdrdx;                                   \
    481            ffg += fdgdx;                                   \
     474           ffg += fdgdx;                                   \
    482475           ffb += fdbdx;                                   \
    483            ffa += fdadx;                                   \
    484            ffs += fdsdx;                                   \
    485            fft += fdtdx;                                   \
     476           ffa += fdadx;                                   \
     477           ffs += fdsdx;                                   \
     478           fft += fdtdx;                                   \
    486479           dest += 4;                                      \
    487         }
     480        }
    488481
    489482#define SPAN2(DO_TEX,COMP)                                 \
    490         for (i=0;i<n;i++) {                                \
     483        for (i=0;i<n;i++) {                                \
    491484           GLint s = FixedToInt(ffs) & smask;              \
    492485           GLint t = FixedToInt(fft) & tmask;              \
     
    508501              tex11 -= tbytesline;                         \
    509502           }                                               \
    510            zspan[i] = FixedToDepth(ffz);                   \
     503           zspan[i] = FixedToDepth(ffz);                   \
    511504           DO_TEX;                                         \
    512            ffz += fdzdx;                                   \
     505           ffz += fdzdx;                                   \
    513506           ffr += fdrdx;                                   \
    514            ffg += fdgdx;                                   \
     507           ffg += fdgdx;                                   \
    515508           ffb += fdbdx;                                   \
    516            ffa += fdadx;                                   \
    517            ffs += fdsdx;                                   \
    518            fft += fdtdx;                                   \
     509           ffa += fdadx;                                   \
     510           ffs += fdsdx;                                   \
     511           fft += fdtdx;                                   \
    519512           dest += 4;                                      \
    520         }
     513        }
    521514
    522515/* here comes the heavy part.. (something for the compiler to chew on) */
    523 #define INNER_LOOP( LEFT, RIGHT, Y )                       \
    524         {                                                  \
    525            GLint i, n = RIGHT-LEFT;                        \
    526            GLdepth zspan[MAX_WIDTH];                       \
    527            GLubyte rgba[MAX_WIDTH][4];                     \
    528            if (n>0) {                                      \
     516#define INNER_LOOP( LEFT, RIGHT, Y )                       \
     517        {                                                  \
     518           GLint i, n = RIGHT-LEFT;                        \
     519           GLdepth zspan[MAX_WIDTH];                       \
     520           GLubyte rgba[MAX_WIDTH][4];                     \
     521           if (n>0) {                                      \
    529522              GLubyte *dest = rgba[0];                     \
    530523              ffs -= FIXED_HALF; /* off-by-one error? */   \
    531524              fft -= FIXED_HALF;                           \
    532525              switch (filter) {                            \
    533               case GL_NEAREST:                             \
    534                 switch (format) {                         \
     526              case GL_NEAREST:                             \
     527                switch (format) {                         \
    535528                 case GL_RGB:                              \
    536                     switch (envmode) {                     \
    537                     case GL_MODULATE:                      \
     529                    switch (envmode) {                     \
     530                    case GL_MODULATE:                      \
    538531                       SPAN1(NEAREST_RGB;MODULATE,3);      \
    539532                       break;                              \
    540                     case GL_DECAL:                         \
     533                    case GL_DECAL:                         \
    541534                    case GL_REPLACE:                       \
    542535                       SPAN1(NEAREST_RGB_REPLACE,3);       \
     
    545538                       SPAN1(NEAREST_RGB;BLEND,3);         \
    546539                       break;                              \
    547                     case GL_ADD:                           \
    548                        SPAN1(NEAREST_RGB;ADD,3);           \
    549                        break;                              \
    550                     }                                      \
     540                    default: /* unexpected env mode */     \
     541                       ABORT();                            \
     542                    }                                      \
    551543                    break;                                 \
    552                 case GL_RGBA:                             \
    553                     switch(envmode) {                      \
    554                     case GL_MODULATE:                      \
     544                case GL_RGBA:                             \
     545                    switch(envmode) {                      \
     546                    case GL_MODULATE:                      \
    555547                       SPAN1(NEAREST_RGBA;MODULATE,4);     \
    556548                       break;                              \
    557                     case GL_DECAL:                         \
     549                    case GL_DECAL:                         \
    558550                       SPAN1(NEAREST_RGBA;DECAL,4);        \
    559551                       break;                              \
    560                     case GL_BLEND:                         \
     552                    case GL_BLEND:                         \
    561553                       SPAN1(NEAREST_RGBA;BLEND,4);        \
    562554                       break;                              \
    563                     case GL_REPLACE:                       \
     555                    case GL_REPLACE:                       \
    564556                       SPAN1(NEAREST_RGBA_REPLACE,4);      \
    565557                       break;                              \
    566                     case GL_ADD:                           \
    567                        SPAN1(NEAREST_RGBA;ADD,4);          \
    568                        break;                              \
    569                     }                                      \
     558                    default: /* unexpected env mode */     \
     559                       ABORT();                            \
     560                    }                                      \
    570561                    break;                                 \
    571                  }                                         \
     562                 }                                         \
    572563                 break;                                    \
    573               case GL_LINEAR:                              \
     564              case GL_LINEAR:                              \
    574565                 ffs -= FIXED_HALF;                        \
    575566                 fft -= FIXED_HALF;                        \
    576                 switch (format) {                         \
    577                 case GL_RGB:                              \
    578                     switch (envmode) {                     \
    579                     case GL_MODULATE:                      \
    580                        SPAN2(LINEAR_RGB;MODULATE,3);       \
    581                        break;                              \
    582                     case GL_DECAL:                         \
    583                     case GL_REPLACE:                       \
     567                switch (format) {                         \
     568                case GL_RGB:                              \
     569                    switch (envmode) {                     \
     570                    case GL_MODULATE:                      \
     571                       SPAN2(LINEAR_RGB;MODULATE,3);       \
     572                       break;                              \
     573                    case GL_DECAL:                         \
     574                    case GL_REPLACE:                       \
    584575                       SPAN2(LINEAR_RGB;REPLACE,3);        \
    585576                       break;                              \
    586                     case GL_BLEND:                         \
    587                        SPAN2(LINEAR_RGB;BLEND,3);          \
    588                        break;                              \
    589                     case GL_ADD:                           \
    590                        SPAN2(LINEAR_RGB;ADD,3);            \
    591                        break;                              \
    592                     }                                      \
    593                     break;                                 \
    594                  case GL_RGBA:                             \
    595                     switch (envmode) {                     \
    596                     case GL_MODULATE:                      \
    597                        SPAN2(LINEAR_RGBA;MODULATE,4);      \
    598                        break;                              \
    599                     case GL_DECAL:                         \
    600                        SPAN2(LINEAR_RGBA;DECAL,4);         \
    601                        break;                              \
    602                     case GL_BLEND:                         \
    603                        SPAN2(LINEAR_RGBA;BLEND,4);         \
    604                        break;                              \
    605                     case GL_REPLACE:                       \
    606                        SPAN2(LINEAR_RGBA;REPLACE,4);       \
    607                        break;                              \
    608                     case GL_ADD:                           \
    609                        SPAN2(LINEAR_RGBA;ADD,4);           \
    610                        break;                              \
    611                     }                                      \
    612                     break;                                 \
    613                  }                                         \
     577                    case GL_BLEND:                         \
     578                       SPAN2(LINEAR_RGB;BLEND,3);          \
     579                       break;                              \
     580                    default: /* unexpected env mode */     \
     581                       ABORT();                            \
     582                    }                                      \
     583                    break;                                 \
     584                 case GL_RGBA:                             \
     585                    switch (envmode) {                     \
     586                    case GL_MODULATE:                      \
     587                       SPAN2(LINEAR_RGBA;MODULATE,4);      \
     588                       break;                              \
     589                    case GL_DECAL:                         \
     590                       SPAN2(LINEAR_RGBA;DECAL,4);         \
     591                       break;                              \
     592                    case GL_BLEND:                         \
     593                       SPAN2(LINEAR_RGBA;BLEND,4);         \
     594                       break;                              \
     595                    case GL_REPLACE:                       \
     596                       SPAN2(LINEAR_RGBA;REPLACE,4);       \
     597                       break;                              \
     598                    default: /* unexpected env mode */     \
     599                       ABORT();                            \
     600                    }                                      \
     601                    break;                                 \
     602                 }                                         \
    614603                 break;                                    \
    615               }                                            \
     604              }                                            \
    616605              gl_write_rgba_span(ctx, n, LEFT, Y, zspan,   \
    617606                                 rgba, GL_POLYGON);        \
     
    619608              ffr = ffg = ffb = ffa = 0;                   \
    620609           }                                               \
    621         }
     610        }
    622611
    623612#include "tritemp.h"
     
    637626#if 000
    638627static void persp_textured_triangle( GLcontext *ctx, GLuint v0, GLuint v1,
    639                                      GLuint v2, GLuint pv )
     628                                     GLuint v2, GLuint pv )
    640629{
    641630
    642631#define INTERP_Z 1
     632#define DEPTH_TYPE DEFAULT_SOFTWARE_DEPTH_TYPE
    643633#define INTERP_RGB 1
    644634#define INTERP_ALPHA 1
    645635#define INTERP_STUV 1
    646 #define SETUP_CODE                                                      \
    647    struct gl_texture_unit *unit = ctx->Texture.Unit+0;                  \
    648    struct gl_texture_object *obj = unit->CurrentD[2];                   \
    649    GLint b = obj->BaseLevel;                                            \
    650    GLfloat twidth = (GLfloat) obj->Image[b]->Width;                     \
    651    GLfloat theight = (GLfloat) obj->Image[b]->Height;                   \
    652    GLint twidth_log2 = obj->Image[b]->WidthLog2;                        \
    653    GLubyte *texture = obj->Image[b]->Data;                              \
     636#define SETUP_CODE                                                      \
     637   struct gl_texture_unit *unit = ctx->Texture.Unit+0;                  \
     638   struct gl_texture_object *obj = unit->CurrentD[2];                   \
     639   GLint b = obj->BaseLevel;                                            \
     640   GLfloat twidth = (GLfloat) obj->Image[b]->Width;                     \
     641   GLfloat theight = (GLfloat) obj->Image[b]->Height;                   \
     642   GLint twidth_log2 = obj->Image[b]->WidthLog2;                        \
     643   GLubyte *texture = obj->Image[b]->Data;                              \
    654644   GLint smask = (obj->Image[b]->Width - 1);                            \
    655645   GLint tmask = (obj->Image[b]->Height - 1);                           \
     
    661651   GLfixed er, eg, eb, ea;                                              \
    662652   GLint tr, tg, tb, ta;                                                \
    663    if (envmode == GL_BLEND || envmode == GL_ADD) {                      \
     653   if (envmode == GL_BLEND) {                                           \
    664654      er = FloatToFixed(unit->EnvColor[0]);                             \
    665655      eg = FloatToFixed(unit->EnvColor[1]);                             \
     
    705695           GLint pos = COMP * ((t << twidth_log2) + s);    \
    706696           GLubyte *tex00 = texture + pos;                 \
    707            zspan[i] = FixedToDepth(ffz);                   \
     697           zspan[i] = FixedToDepth(ffz);                   \
    708698           DO_TEX;                                         \
    709            ffz += fdzdx;                                   \
     699           ffz += fdzdx;                                   \
    710700           ffr += fdrdx;                                   \
    711            ffg += fdgdx;                                   \
     701           ffg += fdgdx;                                   \
    712702           ffb += fdbdx;                                   \
    713            ffa += fdadx;                                   \
     703           ffa += fdadx;                                   \
    714704           SS += dSdx;                                     \
    715705           TT += dTdx;                                     \
    716            vv += dvdx;                                     \
     706           vv += dvdx;                                     \
    717707           dest += 4;                                      \
    718         }
     708        }
    719709
    720710#define SPAN2(DO_TEX,COMP)                                 \
     
    723713           GLfixed ffs = (int)(SS * invQ);                 \
    724714           GLfixed fft = (int)(TT * invQ);                 \
    725            GLint s = FixedToInt(ffs) & smask;              \
    726            GLint t = FixedToInt(fft) & tmask;              \
     715           GLint s = FixedToInt(ffs) & smask;              \
     716           GLint t = FixedToInt(fft) & tmask;              \
    727717           GLint sf = ffs & FIXED_FRAC_MASK;               \
    728718           GLint tf = fft & FIXED_FRAC_MASK;               \
     
    742732              tex11 -= tbytesline;                         \
    743733           }                                               \
    744            zspan[i] = FixedToDepth(ffz);                   \
     734           zspan[i] = FixedToDepth(ffz);                   \
    745735           DO_TEX;                                         \
    746            ffz += fdzdx;                                   \
     736           ffz += fdzdx;                                   \
    747737           ffr += fdrdx;                                   \
    748            ffg += fdgdx;                                   \
     738           ffg += fdgdx;                                   \
    749739           ffb += fdbdx;                                   \
    750            ffa += fdadx;                                   \
     740           ffa += fdadx;                                   \
    751741           SS += dSdx;                                     \
    752742           TT += dTdx;                                     \
    753            vv += dvdx;                                     \
     743           vv += dvdx;                                     \
    754744           dest += 4;                                      \
    755         }
    756 
    757 #define INNER_LOOP( LEFT, RIGHT, Y )                       \
    758         {                                                  \
    759            GLint i, n = RIGHT-LEFT;                        \
    760            GLdepth zspan[MAX_WIDTH];                       \
    761            GLubyte rgba[MAX_WIDTH][4];                     \
     745        }
     746
     747#define INNER_LOOP( LEFT, RIGHT, Y )                       \
     748        {                                                  \
     749           GLint i, n = RIGHT-LEFT;                        \
     750           GLdepth zspan[MAX_WIDTH];                       \
     751           GLubyte rgba[MAX_WIDTH][4];                     \
    762752           (void)uu; /* please GCC */                      \
    763            if (n>0) {                                      \
     753           if (n>0) {                                      \
    764754              GLfloat SS = ss * sscale;                    \
    765755              GLfloat TT = tt * tscale;                    \
     
    768758              GLubyte *dest = rgba[0];                     \
    769759              switch (filter) {                            \
    770               case GL_NEAREST:                             \
    771                 switch (format) {                         \
     760              case GL_NEAREST:                             \
     761                switch (format) {                         \
    772762                 case GL_RGB:                              \
    773                     switch (envmode) {                     \
    774                     case GL_MODULATE:                      \
     763                    switch (envmode) {                     \
     764                    case GL_MODULATE:                      \
    775765                       SPAN1(NEAREST_RGB;MODULATE,3);      \
    776766                       break;                              \
    777                     case GL_DECAL:                         \
     767                    case GL_DECAL:                         \
    778768                    case GL_REPLACE:                       \
    779769                       SPAN1(NEAREST_RGB_REPLACE,3);       \
     
    782772                       SPAN1(NEAREST_RGB;BLEND,3);         \
    783773                       break;                              \
    784                     case GL_ADD:                           \
    785                        SPAN1(NEAREST_RGB;ADD,3);           \
    786                        break;                              \
    787                     }                                      \
     774                    default: /* unexpected env mode */     \
     775                       ABORT();                            \
     776                    }                                      \
    788777                    break;                                 \
    789                 case GL_RGBA:                             \
    790                     switch(envmode) {                      \
    791                     case GL_MODULATE:                      \
     778                case GL_RGBA:                             \
     779                    switch(envmode) {                      \
     780                    case GL_MODULATE:                      \
    792781                       SPAN1(NEAREST_RGBA;MODULATE,4);     \
    793782                       break;                              \
    794                     case GL_DECAL:                         \
     783                    case GL_DECAL:                         \
    795784                       SPAN1(NEAREST_RGBA;DECAL,4);        \
    796785                       break;                              \
    797                     case GL_BLEND:                         \
     786                    case GL_BLEND:                         \
    798787                       SPAN1(NEAREST_RGBA;BLEND,4);        \
    799788                       break;                              \
    800                     case GL_REPLACE:                       \
     789                    case GL_REPLACE:                       \
    801790                       SPAN1(NEAREST_RGBA_REPLACE,4);      \
    802791                       break;                              \
    803                     case GL_ADD:                           \
    804                        SPAN1(NEAREST_RGBA;ADD,4);          \
    805                        break;                              \
    806                     }                                      \
     792                    default: /* unexpected env mode */     \
     793                       ABORT();                            \
     794                    }                                      \
    807795                    break;                                 \
    808                  }                                         \
     796                 }                                         \
    809797                 break;                                    \
    810               case GL_LINEAR:                              \
    811                  SS -= 0.5f * FIXED_SCALE * vv;            \
    812                 TT -= 0.5f * FIXED_SCALE * vv;            \
    813                 switch (format) {                         \
    814                 case GL_RGB:                              \
    815                     switch (envmode) {                     \
    816                     case GL_MODULATE:                      \
    817                        SPAN2(LINEAR_RGB;MODULATE,3);       \
    818                        break;                              \
    819                     case GL_DECAL:                         \
    820                     case GL_REPLACE:                       \
     798              case GL_LINEAR:                              \
     799                 SS -= 0.5f * FIXED_SCALE * vv;            \
     800                TT -= 0.5f * FIXED_SCALE * vv;            \
     801                switch (format) {                         \
     802                case GL_RGB:                              \
     803                    switch (envmode) {                     \
     804                    case GL_MODULATE:                      \
     805                       SPAN2(LINEAR_RGB;MODULATE,3);       \
     806                       break;                              \
     807                    case GL_DECAL:                         \
     808                    case GL_REPLACE:                       \
    821809                       SPAN2(LINEAR_RGB;REPLACE,3);        \
    822810                       break;                              \
    823                     case GL_BLEND:                         \
    824                        SPAN2(LINEAR_RGB;BLEND,3);          \
    825                        break;                              \
    826                     case GL_ADD:                           \
    827                        SPAN2(LINEAR_RGB;ADD,3);            \
    828                        break;                              \
    829                     }                                      \
    830                     break;                                 \
    831                  case GL_RGBA:                             \
    832                     switch (envmode) {                     \
    833                     case GL_MODULATE:                      \
    834                        SPAN2(LINEAR_RGBA;MODULATE,4);      \
    835                        break;                              \
    836                     case GL_DECAL:                         \
    837                        SPAN2(LINEAR_RGBA;DECAL,4);         \
    838                        break;                              \
    839                     case GL_BLEND:                         \
    840                        SPAN2(LINEAR_RGBA;BLEND,4);         \
    841                        break;                              \
    842                     case GL_REPLACE:                       \
    843                        SPAN2(LINEAR_RGBA;REPLACE,4);       \
    844                        break;                              \
    845                     case GL_ADD:                           \
    846                        SPAN2(LINEAR_RGBA;ADD,4);           \
    847                        break;                              \
    848                     }                                      \
    849                     break;                                 \
    850                  }                                         \
     811                    case GL_BLEND:                         \
     812                       SPAN2(LINEAR_RGB;BLEND,3);          \
     813                       break;                              \
     814                    default: /* unexpected env mode */     \
     815                       ABORT();                            \
     816                    }                                      \
     817                    break;                                 \
     818                 case GL_RGBA:                             \
     819                    switch (envmode) {                     \
     820                    case GL_MODULATE:                      \
     821                       SPAN2(LINEAR_RGBA;MODULATE,4);      \
     822                       break;                              \
     823                    case GL_DECAL:                         \
     824                       SPAN2(LINEAR_RGBA;DECAL,4);         \
     825                       break;                              \
     826                    case GL_BLEND:                         \
     827                       SPAN2(LINEAR_RGBA;BLEND,4);         \
     828                       break;                              \
     829                    case GL_REPLACE:                       \
     830                       SPAN2(LINEAR_RGBA;REPLACE,4);       \
     831                       break;                              \
     832                    default: /* unexpected env mode */     \
     833                       ABORT();                            \
     834                    }                                      \
     835                    break;                                 \
     836                 }                                         \
    851837                 break;                                    \
    852               }                                            \
    853               gl_write_rgba_span( ctx, n, LEFT, Y, zspan,  \
    854                                   rgba, GL_POLYGON );      \
     838              }                                            \
     839              gl_write_rgba_span( ctx, n, LEFT, Y, zspan,  \
     840                                  rgba, GL_POLYGON );      \
    855841              ffr = ffg = ffb = ffa = 0;                   \
    856            }                                               \
    857         }
     842           }                                               \
     843        }
    858844
    859845
     
    876862{
    877863#define INTERP_Z 1
     864#define DEPTH_TYPE DEFAULT_SOFTWARE_DEPTH_TYPE
    878865#define INTERP_RGB 1
    879866#define INTERP_ALPHA 1
    880867#define INTERP_STUV 1
    881 #define SETUP_CODE                                              \
    882    GLboolean flat_shade = (ctx->Light.ShadeModel==GL_FLAT);     \
    883    GLint r, g, b, a;                                            \
    884    if (flat_shade) {                                            \
    885       r = VB->ColorPtr->data[pv][0];                            \
    886       g = VB->ColorPtr->data[pv][1];                            \
    887       b = VB->ColorPtr->data[pv][2];                            \
    888       a = VB->ColorPtr->data[pv][3];                            \
     868#define SETUP_CODE                                              \
     869   GLboolean flat_shade = (ctx->Light.ShadeModel==GL_FLAT);     \
     870   GLint r, g, b, a;                                            \
     871   if (flat_shade) {                                            \
     872      r = VB->ColorPtr->data[pv][0];                            \
     873      g = VB->ColorPtr->data[pv][1];                            \
     874      b = VB->ColorPtr->data[pv][2];                            \
     875      a = VB->ColorPtr->data[pv][3];                            \
    889876   }
    890 #define INNER_LOOP( LEFT, RIGHT, Y )                            \
    891         {                                                       \
    892            GLint i, n = RIGHT-LEFT;                             \
    893            GLdepth zspan[MAX_WIDTH];                            \
    894            GLubyte rgba[MAX_WIDTH][4];                          \
    895            GLfloat s[MAX_WIDTH], t[MAX_WIDTH], u[MAX_WIDTH];    \
    896            if (n>0) {                                           \
    897               if (flat_shade) {                                 \
    898                  for (i=0;i<n;i++) {                            \
    899                     GLdouble invQ = 1.0 / vv;                   \
    900                     zspan[i] = FixedToDepth(ffz);               \
    901                     rgba[i][RCOMP] = r;                         \
    902                     rgba[i][GCOMP] = g;                         \
    903                     rgba[i][BCOMP] = b;                         \
    904                     rgba[i][ACOMP] = a;                         \
    905                     s[i] = ss*invQ;                             \
    906                     t[i] = tt*invQ;                             \
    907                     u[i] = uu*invQ;                             \
    908                     ffz += fdzdx;                               \
    909                     ss += dsdx;                                 \
    910                     tt += dtdx;                                 \
    911                     uu += dudx;                                 \
    912                     vv += dvdx;                                 \
    913                  }                                              \
    914               }                                                 \
    915               else {                                            \
    916                  for (i=0;i<n;i++) {                            \
    917                     GLdouble invQ = 1.0 / vv;                   \
    918                     zspan[i] = FixedToDepth(ffz);               \
    919                     rgba[i][RCOMP] = FixedToInt(ffr);           \
    920                     rgba[i][GCOMP] = FixedToInt(ffg);           \
    921                     rgba[i][BCOMP] = FixedToInt(ffb);           \
    922                     rgba[i][ACOMP] = FixedToInt(ffa);           \
    923                     s[i] = ss*invQ;                             \
    924                     t[i] = tt*invQ;                             \
    925                     u[i] = uu*invQ;                             \
    926                     ffz += fdzdx;                               \
    927                     ffr += fdrdx;                               \
    928                     ffg += fdgdx;                               \
    929                     ffb += fdbdx;                               \
    930                     ffa += fdadx;                               \
    931                     ss += dsdx;                                 \
    932                     tt += dtdx;                                 \
    933                     uu += dudx;                                 \
    934                     vv += dvdx;                                 \
    935                  }                                              \
    936               }                                                 \
    937               gl_write_texture_span( ctx, n, LEFT, Y, zspan,    \
    938                                      s, t, u, NULL,             \
    939                                      rgba, \
    940                                      NULL, GL_POLYGON );        \
    941            }                                                    \
    942         }
     877#define INNER_LOOP( LEFT, RIGHT, Y )                            \
     878        {                                                       \
     879           GLint i, n = RIGHT-LEFT;                             \
     880           GLdepth zspan[MAX_WIDTH];                            \
     881           GLubyte rgba[MAX_WIDTH][4];                          \
     882           GLfloat s[MAX_WIDTH], t[MAX_WIDTH], u[MAX_WIDTH];    \
     883           if (n>0) {                                           \
     884              if (flat_shade) {                                 \
     885                 for (i=0;i<n;i++) {                            \
     886                    GLdouble invQ = 1.0 / vv;                   \
     887                    zspan[i] = FixedToDepth(ffz);               \
     888                    rgba[i][RCOMP] = r;                         \
     889                    rgba[i][GCOMP] = g;                         \
     890                    rgba[i][BCOMP] = b;                         \
     891                    rgba[i][ACOMP] = a;                         \
     892                    s[i] = ss*invQ;                             \
     893                    t[i] = tt*invQ;                             \
     894                    u[i] = uu*invQ;                             \
     895                    ffz += fdzdx;                               \
     896                    ss += dsdx;                                 \
     897                    tt += dtdx;                                 \
     898                    uu += dudx;                                 \
     899                    vv += dvdx;                                 \
     900                 }                                              \
     901              }                                                 \
     902              else {                                            \
     903                 for (i=0;i<n;i++) {                            \
     904                    GLdouble invQ = 1.0 / vv;                   \
     905                    zspan[i] = FixedToDepth(ffz);               \
     906                    rgba[i][RCOMP] = FixedToInt(ffr);           \
     907                    rgba[i][GCOMP] = FixedToInt(ffg);           \
     908                    rgba[i][BCOMP] = FixedToInt(ffb);           \
     909                    rgba[i][ACOMP] = FixedToInt(ffa);           \
     910                    s[i] = ss*invQ;                             \
     911                    t[i] = tt*invQ;                             \
     912                    u[i] = uu*invQ;                             \
     913                    ffz += fdzdx;                               \
     914                    ffr += fdrdx;                               \
     915                    ffg += fdgdx;                               \
     916                    ffb += fdbdx;                               \
     917                    ffa += fdadx;                               \
     918                    ss += dsdx;                                 \
     919                    tt += dtdx;                                 \
     920                    uu += dudx;                                 \
     921                    vv += dvdx;                                 \
     922                 }                                              \
     923              }                                                 \
     924              gl_write_texture_span( ctx, n, LEFT, Y, zspan,    \
     925                                     s, t, u, NULL,             \
     926                                     rgba, \
     927                                     NULL, GL_POLYGON );        \
     928           }                                                    \
     929        }
    943930
    944931#include "tritemp.h"
     
    960947{
    961948#define INTERP_Z 1
     949#define DEPTH_TYPE DEFAULT_SOFTWARE_DEPTH_TYPE
    962950#define INTERP_RGB 1
    963951#define INTERP_SPEC 1
    964952#define INTERP_ALPHA 1
    965953#define INTERP_STUV 1
    966 #define SETUP_CODE                                              \
    967    GLboolean flat_shade = (ctx->Light.ShadeModel==GL_FLAT);     \
    968    GLint r, g, b, a, sr, sg, sb;                                \
    969    if (flat_shade) {                                            \
    970       r = VB->ColorPtr->data[pv][0];                            \
    971       g = VB->ColorPtr->data[pv][1];                            \
    972       b = VB->ColorPtr->data[pv][2];                            \
    973       a = VB->ColorPtr->data[pv][3];                            \
    974       sr = VB->Specular[pv][0];                                 \
    975       sg = VB->Specular[pv][1];                                 \
    976       sb = VB->Specular[pv][2];                                 \
     954#define SETUP_CODE                                              \
     955   GLboolean flat_shade = (ctx->Light.ShadeModel==GL_FLAT);     \
     956   GLint r, g, b, a, sr, sg, sb;                                \
     957   if (flat_shade) {                                            \
     958      r = VB->ColorPtr->data[pv][0];                            \
     959      g = VB->ColorPtr->data[pv][1];                            \
     960      b = VB->ColorPtr->data[pv][2];                            \
     961      a = VB->ColorPtr->data[pv][3];                            \
     962      sr = VB->Specular[pv][0];                                 \
     963      sg = VB->Specular[pv][1];                                 \
     964      sb = VB->Specular[pv][2];                                 \
    977965   }
    978 #define INNER_LOOP( LEFT, RIGHT, Y )                            \
    979         {                                                       \
    980            GLint i, n = RIGHT-LEFT;                             \
    981            GLfloat s[MAX_WIDTH], t[MAX_WIDTH], u[MAX_WIDTH];    \
    982            if (n>0) {                                           \
    983               if (flat_shade) {                                 \
    984                  for (i=0;i<n;i++) {                            \
    985                     GLdouble invQ = 1.0 / vv;                   \
    986                     zspan[i] = FixedToDepth(ffz);               \
    987                     rgba[i][RCOMP] = r;                         \
    988                     rgba[i][GCOMP] = g;                         \
    989                     rgba[i][BCOMP] = b;                         \
    990                     rgba[i][ACOMP] = a;                         \
    991                     spec[i][RCOMP] = sr;                        \
    992                     spec[i][GCOMP] = sg;                        \
    993                     spec[i][BCOMP] = sb;                        \
    994                     s[i] = ss*invQ;                             \
    995                     t[i] = tt*invQ;                             \
    996                     u[i] = uu*invQ;                             \
    997                     ffz += fdzdx;                               \
    998                     ss += dsdx;                                 \
    999                     tt += dtdx;                                 \
    1000                     uu += dudx;                                 \
    1001                     vv += dvdx;                                 \
    1002                  }                                              \
    1003               }                                                 \
    1004               else {                                            \
    1005                  for (i=0;i<n;i++) {                            \
    1006                     GLdouble invQ = 1.0 / vv;                   \
    1007                     zspan[i] = FixedToDepth(ffz);               \
    1008                     rgba[i][RCOMP] = FixedToInt(ffr);           \
    1009                     rgba[i][GCOMP] = FixedToInt(ffg);           \
    1010                     rgba[i][BCOMP] = FixedToInt(ffb);           \
    1011                     rgba[i][ACOMP] = FixedToInt(ffa);           \
    1012                     spec[i][RCOMP] = FixedToInt(ffsr);          \
    1013                     spec[i][GCOMP] = FixedToInt(ffsg);          \
    1014                     spec[i][BCOMP] = FixedToInt(ffsb);          \
    1015                     s[i] = ss*invQ;                             \
    1016                     t[i] = tt*invQ;                             \
    1017                     u[i] = uu*invQ;                             \
    1018                     ffz += fdzdx;                               \
    1019                     ffr += fdrdx;                               \
    1020                     ffg += fdgdx;                               \
    1021                     ffb += fdbdx;                               \
    1022                     ffa += fdadx;                               \
    1023                     ffsr += fdsrdx;                             \
    1024                     ffsg += fdsgdx;                             \
    1025                     ffsb += fdsbdx;                             \
    1026                     ss += dsdx;                                 \
    1027                     tt += dtdx;                                 \
    1028                     uu += dudx;                                 \
    1029                     vv += dvdx;                                 \
    1030                  }                                              \
    1031               }                                                 \
    1032               gl_write_texture_span( ctx, n, LEFT, Y, zspan,    \
    1033                                    s, t, u, NULL, rgba,         \
    1034                                    (const GLubyte (*)[4]) spec, \
    1035                                    GL_POLYGON );                \
    1036            }                                                    \
    1037         }
     966#define INNER_LOOP( LEFT, RIGHT, Y )                            \
     967        {                                                       \
     968           GLint i, n = RIGHT-LEFT;                             \
     969           GLfloat s[MAX_WIDTH], t[MAX_WIDTH], u[MAX_WIDTH];    \
     970           if (n>0) {                                           \
     971              if (flat_shade) {                                 \
     972                 for (i=0;i<n;i++) {                            \
     973                    GLdouble invQ = 1.0 / vv;                   \
     974                    zspan[i] = FixedToDepth(ffz);               \
     975                    rgba[i][RCOMP] = r;                         \
     976                    rgba[i][GCOMP] = g;                         \
     977                    rgba[i][BCOMP] = b;                         \
     978                    rgba[i][ACOMP] = a;                         \
     979                    spec[i][RCOMP] = sr;                        \
     980                    spec[i][GCOMP] = sg;                        \
     981                    spec[i][BCOMP] = sb;                        \
     982                    s[i] = ss*invQ;                             \
     983                    t[i] = tt*invQ;                             \
     984                    u[i] = uu*invQ;                             \
     985                    ffz += fdzdx;                               \
     986                    ss += dsdx;                                 \
     987                    tt += dtdx;                                 \
     988                    uu += dudx;                                 \
     989                    vv += dvdx;                                 \
     990                 }                                              \
     991              }                                                 \
     992              else {                                            \
     993                 for (i=0;i<n;i++) {                            \
     994                    GLdouble invQ = 1.0 / vv;                   \
     995                    zspan[i] = FixedToDepth(ffz);               \
     996                    rgba[i][RCOMP] = FixedToInt(ffr);           \
     997                    rgba[i][GCOMP] = FixedToInt(ffg);           \
     998                    rgba[i][BCOMP] = FixedToInt(ffb);           \
     999                    rgba[i][ACOMP] = FixedToInt(ffa);           \
     1000                    spec[i][RCOMP] = FixedToInt(ffsr);          \
     1001                    spec[i][GCOMP] = FixedToInt(ffsg);          \
     1002                    spec[i][BCOMP] = FixedToInt(ffsb);          \
     1003                    s[i] = ss*invQ;                             \
     1004                    t[i] = tt*invQ;                             \
     1005                    u[i] = uu*invQ;                             \
     1006                    ffz += fdzdx;                               \
     1007                    ffr += fdrdx;                               \
     1008                    ffg += fdgdx;                               \
     1009                    ffb += fdbdx;                               \
     1010                    ffa += fdadx;                               \
     1011                    ffsr += fdsrdx;                             \
     1012                    ffsg += fdsgdx;                             \
     1013                    ffsb += fdsbdx;                             \
     1014                    ss += dsdx;                                 \
     1015                    tt += dtdx;                                 \
     1016                    uu += dudx;                                 \
     1017                    vv += dvdx;                                 \
     1018                 }                                              \
     1019              }                                                 \
     1020              gl_write_texture_span( ctx, n, LEFT, Y, zspan,    \
     1021                                   s, t, u, NULL, rgba,         \
     1022                                   (const GLubyte (*)[4]) spec, \
     1023                                   GL_POLYGON );                \
     1024           }                                                    \
     1025        }
    10381026
    10391027#include "tritemp.h"
     
    10431031
    10441032/*
    1045  * Compute the lambda value (texture level value) for a fragment.
    1046  */
    1047 static GLfloat compute_lambda( GLfloat s, GLfloat dsdx, GLfloat dsdy,
    1048                                GLfloat t, GLfloat dtdx, GLfloat dtdy,
    1049                                GLfloat invQ, GLfloat dqdx, GLfloat dqdy,
    1050                                GLfloat width, GLfloat height )
    1051 {
    1052    GLfloat dudx, dudy, dvdx, dvdy;
    1053    GLfloat r1, r2, rho2;
    1054    GLfloat invQ_width = invQ * width;
    1055    GLfloat invQ_height = invQ * height;
    1056 
    1057    dudx = (dsdx - s*dqdx) * invQ_width;
    1058    dudy = (dsdy - s*dqdy) * invQ_width;
    1059    dvdx = (dtdx - t*dqdx) * invQ_height;
    1060    dvdy = (dtdy - t*dqdy) * invQ_height;
    1061 
    1062    r1 = dudx * dudx + dudy * dudy;
    1063    r2 = dvdx * dvdx + dvdy * dvdy;
    1064 
    1065    rho2 = r1 + r2;     /* used to be:  rho2 = MAX2(r1,r2); */
    1066    ASSERT( rho2 >= 0.0 );
    1067 
     1033 * Compute the lambda value for a fragment. (texture level of detail)
     1034 */
     1035static GLfloat
     1036compute_lambda( GLfloat dsdx, GLfloat dsdy, GLfloat dtdx, GLfloat dtdy,
     1037                GLfloat invQ, GLfloat width, GLfloat height )
     1038{
     1039   GLfloat dudx = dsdx * invQ * width;
     1040   GLfloat dudy = dsdy * invQ * width;
     1041   GLfloat dvdx = dtdx * invQ * height;
     1042   GLfloat dvdy = dtdy * invQ * height;
     1043   GLfloat r1 = dudx * dudx + dudy * dudy;
     1044   GLfloat r2 = dvdx * dvdx + dvdy * dvdy;
     1045   GLfloat rho2 = r1 + r2;             /* used to be:  rho2 = MAX2(r1,r2); */
    10681046   /* return log base 2 of rho */
    1069    return log(rho2) * 1.442695 * 0.5;       /* 1.442695 = 1/log(2) */
     1047   return log(rho2) * 1.442695 * 0.5;                /* 1.442695 = 1/log(2)*/
    10701048}
    10711049
     
    10851063{
    10861064#define INTERP_Z 1
     1065#define DEPTH_TYPE DEFAULT_SOFTWARE_DEPTH_TYPE
    10871066#define INTERP_RGB 1
    10881067#define INTERP_ALPHA 1
    10891068#define INTERP_STUV 1
    10901069
    1091 #define SETUP_CODE                                                      \
    1092    const struct gl_texture_object *obj = ctx->Texture.Unit[0].Current;  \
    1093    const GLint baseLevel = obj->BaseLevel;                              \
    1094    const struct gl_texture_image *texImage = obj->Image[baseLevel];     \
    1095    const GLfloat twidth = (GLfloat) texImage->Width;                    \
    1096    const GLfloat theight = (GLfloat) texImage->Height;                  \
    1097    const GLboolean flat_shade = (ctx->Light.ShadeModel==GL_FLAT);       \
    1098    GLint r, g, b, a;                                                    \
    1099    if (flat_shade) {                                                    \
    1100       r = VB->ColorPtr->data[pv][0];                                    \
    1101       g = VB->ColorPtr->data[pv][1];                                    \
    1102       b = VB->ColorPtr->data[pv][2];                                    \
    1103       a = VB->ColorPtr->data[pv][3];                                    \
     1070#define SETUP_CODE                                                      \
     1071   const struct gl_texture_object *obj = ctx->Texture.Unit[0].Current;  \
     1072   const GLint baseLevel = obj->BaseLevel;                              \
     1073   const struct gl_texture_image *texImage = obj->Image[baseLevel];     \
     1074   const GLfloat twidth = (GLfloat) texImage->Width;                    \
     1075   const GLfloat theight = (GLfloat) texImage->Height;                  \
     1076   const GLboolean flat_shade = (ctx->Light.ShadeModel==GL_FLAT);       \
     1077   GLint r, g, b, a;                                                    \
     1078   if (flat_shade) {                                                    \
     1079      r = VB->ColorPtr->data[pv][0];                                    \
     1080      g = VB->ColorPtr->data[pv][1];                                    \
     1081      b = VB->ColorPtr->data[pv][2];                                    \
     1082      a = VB->ColorPtr->data[pv][3];                                    \
    11041083   }
    11051084
    1106 #define INNER_LOOP( LEFT, RIGHT, Y )                                    \
    1107         {                                                               \
    1108            GLint i, n = RIGHT-LEFT;                                     \
    1109            GLdepth zspan[MAX_WIDTH];                                    \
    1110            GLubyte rgba[MAX_WIDTH][4];                                  \
    1111            GLfloat lambda[MAX_WIDTH];                                   \
    1112            if (n>0) {                                                   \
    1113               if (flat_shade) {                                         \
    1114                  for (i=0;i<n;i++) {                                    \
    1115                     GLdouble invQ = 1.0 / vv;                           \
    1116                     zspan[i] = FixedToDepth(ffz);                       \
    1117                     rgba[i][RCOMP] = r;                                 \
    1118                     rgba[i][GCOMP] = g;                                 \
    1119                     rgba[i][BCOMP] = b;                                 \
    1120                     rgba[i][ACOMP] = a;                                 \
    1121                     s[i] = ss*invQ;                                     \
    1122                     t[i] = tt*invQ;                                     \
    1123                     u[i] = uu*invQ;                                     \
    1124                     lambda[i] = compute_lambda( s[i], dsdx, dsdy,       \
    1125                                                 t[i], dtdx, dtdy,       \
    1126                                                 invQ, dvdx, dvdy,       \
    1127                                                 twidth, theight );      \
    1128                     ffz += fdzdx;                                       \
    1129                     ss += dsdx;                                         \
    1130                     tt += dtdx;                                         \
    1131                     uu += dudx;                                         \
    1132                     vv += dvdx;                                         \
    1133                  }                                                      \
    1134               }                                                         \
    1135               else {                                                    \
    1136                  for (i=0;i<n;i++) {                                    \
    1137                     GLdouble invQ = 1.0 / vv;                           \
    1138                     zspan[i] = FixedToDepth(ffz);                       \
    1139                     rgba[i][RCOMP] = FixedToInt(ffr);                   \
    1140                     rgba[i][GCOMP] = FixedToInt(ffg);                   \
    1141                     rgba[i][BCOMP] = FixedToInt(ffb);                   \
    1142                     rgba[i][ACOMP] = FixedToInt(ffa);                   \
    1143                     s[i] = ss*invQ;                                     \
    1144                     t[i] = tt*invQ;                                     \
    1145                     u[i] = uu*invQ;                                     \
    1146                     lambda[i] = compute_lambda( s[i], dsdx, dsdy,       \
    1147                                                 t[i], dtdx, dtdy,       \
    1148                                                 invQ, dvdx, dvdy,       \
    1149                                                 twidth, theight );      \
    1150                     ffz += fdzdx;                                       \
    1151                     ffr += fdrdx;                                       \
    1152                     ffg += fdgdx;                                       \
    1153                     ffb += fdbdx;                                       \
    1154                     ffa += fdadx;                                       \
    1155                     ss += dsdx;                                         \
    1156                     tt += dtdx;                                         \
    1157                     uu += dudx;                                         \
    1158                     vv += dvdx;                                         \
    1159                  }                                                      \
    1160               }                                                         \
    1161               gl_write_texture_span( ctx, n, LEFT, Y, zspan,            \
    1162                                      s, t, u, lambda,                   \
    1163                                      rgba, NULL, GL_POLYGON );          \
    1164            }                                                            \
    1165         }
     1085#define INNER_LOOP( LEFT, RIGHT, Y )                                    \
     1086        {                                                               \
     1087           GLint i, n = RIGHT-LEFT;                                     \
     1088           GLdepth zspan[MAX_WIDTH];                                    \
     1089           GLubyte rgba[MAX_WIDTH][4];                                  \
     1090           GLfloat lambda[MAX_WIDTH];                                   \
     1091           if (n>0) {                                                   \
     1092              if (flat_shade) {                                         \
     1093                 for (i=0;i<n;i++) {                                    \
     1094                    GLdouble invQ = 1.0 / vv;                           \
     1095                    zspan[i] = FixedToDepth(ffz);                       \
     1096                    rgba[i][RCOMP] = r;                                 \
     1097                    rgba[i][GCOMP] = g;                                 \
     1098                    rgba[i][BCOMP] = b;                                 \
     1099                    rgba[i][ACOMP] = a;                                 \
     1100                    s[i] = ss*invQ;                                     \
     1101                    t[i] = tt*invQ;                                     \
     1102                    u[i] = uu*invQ;                                     \
     1103                    lambda[i] = compute_lambda( dsdx, dsdy, dtdx, dtdy, \
     1104                                                invQ, twidth, theight );\
     1105                    ffz += fdzdx;                                       \
     1106                    ss += dsdx;                                         \
     1107                    tt += dtdx;                                         \
     1108                    uu += dudx;                                         \
     1109                    vv += dvdx;                                         \
     1110                 }                                                      \
     1111              }                                                         \
     1112              else {                                                    \
     1113                 for (i=0;i<n;i++) {                                    \
     1114                    GLdouble invQ = 1.0 / vv;                           \
     1115                    zspan[i] = FixedToDepth(ffz);                       \
     1116                    rgba[i][RCOMP] = FixedToInt(ffr);                   \
     1117                    rgba[i][GCOMP] = FixedToInt(ffg);                   \
     1118                    rgba[i][BCOMP] = FixedToInt(ffb);                   \
     1119                    rgba[i][ACOMP] = FixedToInt(ffa);                   \
     1120                    s[i] = ss*invQ;                                     \
     1121                    t[i] = tt*invQ;                                     \
     1122                    u[i] = uu*invQ;                                     \
     1123                    lambda[i] = compute_lambda( dsdx, dsdy, dtdx, dtdy, \
     1124                                                invQ, twidth, theight );\
     1125                    ffz += fdzdx;                                       \
     1126                    ffr += fdrdx;                                       \
     1127                    ffg += fdgdx;                                       \
     1128                    ffb += fdbdx;                                       \
     1129                    ffa += fdadx;                                       \
     1130                    ss += dsdx;                                         \
     1131                    tt += dtdx;                                         \
     1132                    uu += dudx;                                         \
     1133                    vv += dvdx;                                         \
     1134                 }                                                      \
     1135              }                                                         \
     1136              gl_write_texture_span( ctx, n, LEFT, Y, zspan,            \
     1137                                     s, t, u, lambda,                   \
     1138                                     rgba, NULL, GL_POLYGON );          \
     1139           }                                                            \
     1140        }
    11661141
    11671142#include "tritemp.h"
     
    11841159{
    11851160#define INTERP_Z 1
     1161#define DEPTH_TYPE DEFAULT_SOFTWARE_DEPTH_TYPE
    11861162#define INTERP_RGB 1
    11871163#define INTERP_SPEC 1
     
    11891165#define INTERP_STUV 1
    11901166
    1191 #define SETUP_CODE                                                      \
    1192    const struct gl_texture_object *obj = ctx->Texture.Unit[0].Current;  \
    1193    const GLint baseLevel = obj->BaseLevel;                              \
    1194    const struct gl_texture_image *texImage = obj->Image[baseLevel];     \
    1195    const GLfloat twidth = (GLfloat) texImage->Width;                    \
    1196    const GLfloat theight = (GLfloat) texImage->Height;                  \
    1197    const GLboolean flat_shade = (ctx->Light.ShadeModel==GL_FLAT);       \
    1198    GLint r, g, b, a, sr, sg, sb;                                        \
    1199    if (flat_shade) {                                                    \
    1200       r = VB->ColorPtr->data[pv][0];                                    \
    1201       g = VB->ColorPtr->data[pv][1];                                    \
    1202       b = VB->ColorPtr->data[pv][2];                                    \
    1203       a = VB->ColorPtr->data[pv][3];                                    \
    1204       sr = VB->Specular[pv][0];                                         \
    1205       sg = VB->Specular[pv][1];                                         \
    1206       sb = VB->Specular[pv][2];                                         \
     1167#define SETUP_CODE                                                      \
     1168   const struct gl_texture_object *obj = ctx->Texture.Unit[0].Current;  \
     1169   const GLint baseLevel = obj->BaseLevel;                              \
     1170   const struct gl_texture_image *texImage = obj->Image[baseLevel];     \
     1171   const GLfloat twidth = (GLfloat) texImage->Width;                    \
     1172   const GLfloat theight = (GLfloat) texImage->Height;                  \
     1173   const GLboolean flat_shade = (ctx->Light.ShadeModel==GL_FLAT);       \
     1174   GLint r, g, b, a, sr, sg, sb;                                        \
     1175   if (flat_shade) {                                                    \
     1176      r = VB->ColorPtr->data[pv][0];                                    \
     1177      g = VB->ColorPtr->data[pv][1];                                    \
     1178      b = VB->ColorPtr->data[pv][2];                                    \
     1179      a = VB->ColorPtr->data[pv][3];                                    \
     1180      sr = VB->Specular[pv][0];                                         \
     1181      sg = VB->Specular[pv][1];                                         \
     1182      sb = VB->Specular[pv][2];                                         \
    12071183   }
    12081184
    1209 #define INNER_LOOP( LEFT, RIGHT, Y )                                    \
    1210         {                                                               \
    1211            GLint i, n = RIGHT-LEFT;                                     \
    1212            GLdepth zspan[MAX_WIDTH];                                    \
    1213            GLubyte spec[MAX_WIDTH][4];                                  \
    1214            GLubyte rgba[MAX_WIDTH][4];                                  \
    1215            GLfloat lambda[MAX_WIDTH];                                   \
    1216            if (n>0) {                                                   \
    1217               if (flat_shade) {                                         \
    1218                  for (i=0;i<n;i++) {                                    \
    1219                     GLdouble invQ = 1.0 / vv;                           \
    1220                     zspan[i] = FixedToDepth(ffz);                       \
    1221                     rgba[i][RCOMP] = r;                                 \
    1222                     rgba[i][GCOMP] = g;                                 \
    1223                     rgba[i][BCOMP] = b;                                 \
    1224                     rgba[i][ACOMP] = a;                                 \
    1225                     spec[i][RCOMP] = sr;                                \
    1226                     spec[i][GCOMP] = sg;                                \
    1227                     spec[i][BCOMP] = sb;                                \
    1228                     s[i] = ss*invQ;                                     \
    1229                     t[i] = tt*invQ;                                     \
    1230                     u[i] = uu*invQ;                                     \
    1231                     lambda[i] = compute_lambda( s[i], dsdx, dsdy,       \
    1232                                                 t[i], dtdx, dtdy,       \
    1233                                                 invQ, dvdx, dvdy,       \
    1234                                                 twidth, theight );      \
    1235                     ffz += fdzdx;                                       \
    1236                     ss += dsdx;                                         \
    1237                     tt += dtdx;                                         \
    1238                     uu += dudx;                                         \
    1239                     vv += dvdx;                                         \
    1240                  }                                                      \
    1241               }                                                         \
    1242               else {                                                    \
    1243                  for (i=0;i<n;i++) {                                    \
    1244                     GLdouble invQ = 1.0 / vv;                           \
    1245                     zspan[i] = FixedToDepth(ffz);                       \
    1246                     rgba[i][RCOMP] = FixedToInt(ffr);                   \
    1247                     rgba[i][GCOMP] = FixedToInt(ffg);                   \
    1248                     rgba[i][BCOMP] = FixedToInt(ffb);                   \
    1249                     rgba[i][ACOMP] = FixedToInt(ffa);                   \
    1250                     spec[i][RCOMP] = FixedToInt(ffsr);                  \
    1251                     spec[i][GCOMP] = FixedToInt(ffsg);                  \
    1252                     spec[i][BCOMP] = FixedToInt(ffsb);                  \
    1253                     s[i] = ss*invQ;                                     \
    1254                     t[i] = tt*invQ;                                     \
    1255                     u[i] = uu*invQ;                                     \
    1256                     lambda[i] = compute_lambda( s[i], dsdx, dsdy,       \
    1257                                                 t[i], dtdx, dtdy,       \
    1258                                                 invQ, dvdx, dvdy,       \
    1259                                                 twidth, theight );      \
    1260                     ffz += fdzdx;                                       \
    1261                     ffr += fdrdx;                                       \
    1262                     ffg += fdgdx;                                       \
    1263                     ffb += fdbdx;                                       \
    1264                     ffa += fdadx;                                       \
    1265                     ffsr += fdsrdx;                                     \
    1266                     ffsg += fdsgdx;                                     \
    1267                     ffsb += fdsbdx;                                     \
    1268                     ss += dsdx;                                         \
    1269                     tt += dtdx;                                         \
    1270                     uu += dudx;                                         \
    1271                     vv += dvdx;                                         \
    1272                  }                                                      \
    1273               }                                                         \
    1274               gl_write_texture_span( ctx, n, LEFT, Y, zspan,            \
    1275                                      s, t, u, lambda,                   \
    1276                                      rgba, (const GLubyte (*)[4]) spec, \
    1277                                      GL_POLYGON );                      \
    1278            }                                                            \
    1279         }
     1185#define INNER_LOOP( LEFT, RIGHT, Y )                                    \
     1186        {                                                               \
     1187           GLint i, n = RIGHT-LEFT;                                     \
     1188           GLdepth zspan[MAX_WIDTH];                                    \
     1189           GLubyte spec[MAX_WIDTH][4];                                  \
     1190           GLubyte rgba[MAX_WIDTH][4];                                  \
     1191           GLfloat lambda[MAX_WIDTH];                                   \
     1192           if (n>0) {                                                   \
     1193              if (flat_shade) {                                         \
     1194                 for (i=0;i<n;i++) {                                    \
     1195                    GLdouble invQ = 1.0 / vv;                           \
     1196                    zspan[i] = FixedToDepth(ffz);                       \
     1197                    rgba[i][RCOMP] = r;                                 \
     1198                    rgba[i][GCOMP] = g;                                 \
     1199                    rgba[i][BCOMP] = b;                                 \
     1200                    rgba[i][ACOMP] = a;                                 \
     1201                    spec[i][RCOMP] = sr;                                \
     1202                    spec[i][GCOMP] = sg;                                \
     1203                    spec[i][BCOMP] = sb;                                \
     1204                    s[i] = ss*invQ;                                     \
     1205                    t[i] = tt*invQ;                                     \
     1206                    u[i] = uu*invQ;                                     \
     1207                    lambda[i] = compute_lambda( dsdx, dsdy, dtdx, dtdy, \
     1208                                                invQ, twidth, theight );\
     1209                    ffz += fdzdx;                                       \
     1210                    ss += dsdx;                                         \
     1211                    tt += dtdx;                                         \
     1212                    uu += dudx;                                         \
     1213                    vv += dvdx;                                         \
     1214                 }                                                      \
     1215              }                                                         \
     1216              else {                                                    \
     1217                 for (i=0;i<n;i++) {                                    \
     1218                    GLdouble invQ = 1.0 / vv;                           \
     1219                    zspan[i] = FixedToDepth(ffz);                       \
     1220                    rgba[i][RCOMP] = FixedToInt(ffr);                   \
     1221                    rgba[i][GCOMP] = FixedToInt(ffg);                   \
     1222                    rgba[i][BCOMP] = FixedToInt(ffb);                   \
     1223                    rgba[i][ACOMP] = FixedToInt(ffa);                   \
     1224                    spec[i][RCOMP] = FixedToInt(ffsr);                  \
     1225                    spec[i][GCOMP] = FixedToInt(ffsg);                  \
     1226                    spec[i][BCOMP] = FixedToInt(ffsb);                  \
     1227                    s[i] = ss*invQ;                                     \
     1228                    t[i] = tt*invQ;                                     \
     1229                    u[i] = uu*invQ;                                     \
     1230                    lambda[i] = compute_lambda( dsdx, dsdy, dtdx, dtdy, \
     1231                                                invQ, twidth, theight );\
     1232                    ffz += fdzdx;                                       \
     1233                    ffr += fdrdx;                                       \
     1234                    ffg += fdgdx;                                       \
     1235                    ffb += fdbdx;                                       \
     1236                    ffa += fdadx;                                       \
     1237                    ffsr += fdsrdx;                                     \
     1238                    ffsg += fdsgdx;                                     \
     1239                    ffsb += fdsbdx;                                     \
     1240                    ss += dsdx;                                         \
     1241                    tt += dtdx;                                         \
     1242                    uu += dudx;                                         \
     1243                    vv += dvdx;                                         \
     1244                 }                                                      \
     1245              }                                                         \
     1246              gl_write_texture_span( ctx, n, LEFT, Y, zspan,            \
     1247                                     s, t, u, lambda,                   \
     1248                                     rgba, (const GLubyte (*)[4]) spec, \
     1249                                     GL_POLYGON );                      \
     1250           }                                                            \
     1251        }
    12801252
    12811253#include "tritemp.h"
     
    12971269   GLubyte rgba[MAX_WIDTH][4];
    12981270#define INTERP_Z 1
     1271#define DEPTH_TYPE DEFAULT_SOFTWARE_DEPTH_TYPE
    12991272#define INTERP_RGB 1
    13001273#define INTERP_ALPHA 1
     
    13021275#define INTERP_STUV1 1
    13031276
    1304 #define SETUP_CODE                                                      \
    1305    const struct gl_texture_object *obj0 = ctx->Texture.Unit[0].Current; \
    1306    const GLint baseLevel0 = obj0->BaseLevel;                            \
    1307    const struct gl_texture_image *texImage0 = obj0->Image[baseLevel0];  \
    1308    const GLfloat twidth0 = (GLfloat) texImage0->Width;                  \
    1309    const GLfloat theight0 = (GLfloat) texImage0->Height;                \
    1310    const struct gl_texture_object *obj1 = ctx->Texture.Unit[1].Current; \
    1311    const GLint baseLevel1 = obj1->BaseLevel;                            \
    1312    const struct gl_texture_image *texImage1 = obj1->Image[baseLevel1];  \
    1313    const GLfloat twidth1 = (GLfloat) texImage1->Width;                  \
    1314    const GLfloat theight1 = (GLfloat) texImage1->Height;                \
    1315    const GLboolean flat_shade = (ctx->Light.ShadeModel==GL_FLAT);       \
    1316    GLint r, g, b, a;                                                    \
    1317    if (flat_shade) {                                                    \
    1318       r = VB->ColorPtr->data[pv][0];                                    \
    1319       g = VB->ColorPtr->data[pv][1];                                    \
    1320       b = VB->ColorPtr->data[pv][2];                                    \
    1321       a = VB->ColorPtr->data[pv][3];                                    \
     1277#define SETUP_CODE                                                      \
     1278   const struct gl_texture_object *obj0 = ctx->Texture.Unit[0].Current; \
     1279   const GLint baseLevel0 = obj0->BaseLevel;                            \
     1280   const struct gl_texture_image *texImage0 = obj0->Image[baseLevel0];  \
     1281   const GLfloat twidth0 = (GLfloat) texImage0->Width;                  \
     1282   const GLfloat theight0 = (GLfloat) texImage0->Height;                \
     1283   const struct gl_texture_object *obj1 = ctx->Texture.Unit[1].Current; \
     1284   const GLint baseLevel1 = obj1->BaseLevel;                            \
     1285   const struct gl_texture_image *texImage1 = obj1->Image[baseLevel1];  \
     1286   const GLfloat twidth1 = (GLfloat) texImage1->Width;                  \
     1287   const GLfloat theight1 = (GLfloat) texImage1->Height;                \
     1288   const GLboolean flat_shade = (ctx->Light.ShadeModel==GL_FLAT);       \
     1289   GLint r, g, b, a;                                                    \
     1290   if (flat_shade) {                                                    \
     1291      r = VB->ColorPtr->data[pv][0];                                    \
     1292      g = VB->ColorPtr->data[pv][1];                                    \
     1293      b = VB->ColorPtr->data[pv][2];                                    \
     1294      a = VB->ColorPtr->data[pv][3];                                    \
    13221295   }
    13231296
    1324 #define INNER_LOOP( LEFT, RIGHT, Y )                                    \
    1325         {                                                               \
    1326            GLint i, n = RIGHT-LEFT;                                     \
    1327            GLdepth zspan[MAX_WIDTH];                                    \
    1328            GLfloat lambda[MAX_TEXTURE_UNITS][MAX_WIDTH];                \
    1329            if (n>0) {                                                   \
    1330               if (flat_shade) {                                         \
    1331                  for (i=0;i<n;i++) {                                    \
    1332                     GLdouble invQ = 1.0 / vv;                           \
    1333                     GLdouble invQ1 = 1.0 / vv1;                         \
    1334                     zspan[i] = FixedToDepth(ffz);                       \
    1335                     rgba[i][RCOMP] = r;                                 \
    1336                     rgba[i][GCOMP] = g;                                 \
    1337                     rgba[i][BCOMP] = b;                                 \
    1338                     rgba[i][ACOMP] = a;                                 \
    1339                     s[0][i] = ss*invQ;                                  \
    1340                     t[0][i] = tt*invQ;                                  \
    1341                     u[0][i] = uu*invQ;                                  \
    1342                     lambda[0][i] = compute_lambda( s[0][i], dsdx, dsdy, \
    1343                                                    t[0][i], dtdx, dtdy, \
    1344                                                    invQ, dvdx, dvdy,    \
    1345                                                    twidth0, theight0 ); \
    1346                     s[1][i] = ss1*invQ1;                                \
    1347                     t[1][i] = tt1*invQ1;                                \
    1348                     u[1][i] = uu1*invQ1;                                \
    1349                     lambda[1][i] = compute_lambda( s[1][i], ds1dx, ds1dy,       \
    1350                                                    t[1][i], dt1dx, dt1dy,       \
    1351                                                    invQ1, dvdx, dvdy,   \
    1352                                                    twidth1, theight1 ); \
    1353                     ffz += fdzdx;                                       \
    1354                     ss += dsdx;                                         \
    1355                     tt += dtdx;                                         \
    1356                     uu += dudx;                                         \
    1357                     vv += dvdx;                                         \
    1358                     ss1 += ds1dx;                                       \
    1359                     tt1 += dt1dx;                                       \
    1360                     uu1 += du1dx;                                       \
    1361                     vv1 += dv1dx;                                       \
    1362                  }                                                      \
    1363               }                                                         \
    1364               else {                                                    \
    1365                  for (i=0;i<n;i++) {                                    \
    1366                     GLdouble invQ = 1.0 / vv;                           \
    1367                     GLdouble invQ1 = 1.0 / vv1;                         \
    1368                     zspan[i] = FixedToDepth(ffz);                       \
    1369                     rgba[i][RCOMP] = FixedToInt(ffr);                   \
    1370                     rgba[i][GCOMP] = FixedToInt(ffg);                   \
    1371                     rgba[i][BCOMP] = FixedToInt(ffb);                   \
    1372                     rgba[i][ACOMP] = FixedToInt(ffa);                   \
    1373                     s[0][i] = ss*invQ;                                  \
    1374                     t[0][i] = tt*invQ;                                  \
    1375                     u[0][i] = uu*invQ;                                  \
    1376                     lambda[0][i] = compute_lambda( s[0][i], dsdx, dsdy, \
    1377                                                    t[0][i], dtdx, dtdy, \
    1378                                                    invQ, dvdx, dvdy,    \
    1379                                                    twidth0, theight0 ); \
    1380                     s[1][i] = ss1*invQ1;                                \
    1381                     t[1][i] = tt1*invQ1;                                \
    1382                     u[1][i] = uu1*invQ1;                                \
    1383                     lambda[1][i] = compute_lambda( s[1][i], ds1dx, ds1dy, \
    1384                                                    t[1][i], dt1dx, dt1dy, \
    1385                                                    invQ1, dvdx, dvdy,   \
    1386                                                    twidth1, theight1 ); \
    1387                     ffz += fdzdx;                                       \
    1388                     ffr += fdrdx;                                       \
    1389                     ffg += fdgdx;                                       \
    1390                     ffb += fdbdx;                                       \
    1391                     ffa += fdadx;                                       \
    1392                     ss += dsdx;                                         \
    1393                     tt += dtdx;                                         \
    1394                     uu += dudx;                                         \
    1395                     vv += dvdx;                                         \
    1396                     ss1 += ds1dx;                                       \
    1397                     tt1 += dt1dx;                                       \
    1398                     uu1 += du1dx;                                       \
    1399                     vv1 += dv1dx;                                       \
    1400                  }                                                      \
    1401               }                                                         \
    1402               gl_write_multitexture_span( ctx, 2, n, LEFT, Y, zspan,    \
    1403                                       (const GLfloat (*)[MAX_WIDTH]) s, \
    1404                                       (const GLfloat (*)[MAX_WIDTH]) t, \
    1405                                       (const GLfloat (*)[MAX_WIDTH]) u, \
    1406                                       (GLfloat (*)[MAX_WIDTH]) lambda,  \
    1407                                       rgba, NULL, GL_POLYGON );         \
    1408            }                                                            \
    1409         }
     1297#define INNER_LOOP( LEFT, RIGHT, Y )                                    \
     1298        {                                                               \
     1299           GLint i, n = RIGHT-LEFT;                                     \
     1300           GLdepth zspan[MAX_WIDTH];                                    \
     1301           GLfloat lambda[MAX_TEXTURE_UNITS][MAX_WIDTH];                \
     1302           if (n>0) {                                                   \
     1303              if (flat_shade) {                                         \
     1304                 for (i=0;i<n;i++) {                                    \
     1305                    GLdouble invQ = 1.0 / vv;                           \
     1306                    GLdouble invQ1 = 1.0 / vv1;                         \
     1307                    zspan[i] = FixedToDepth(ffz);                       \
     1308                    rgba[i][RCOMP] = r;                                 \
     1309                    rgba[i][GCOMP] = g;                                 \
     1310                    rgba[i][BCOMP] = b;                                 \
     1311                    rgba[i][ACOMP] = a;                                 \
     1312                    s[0][i] = ss*invQ;                                  \
     1313                    t[0][i] = tt*invQ;                                  \
     1314                    u[0][i] = uu*invQ;                                  \
     1315                    lambda[0][i] = compute_lambda( dsdx, dsdy,          \
     1316                                                   dtdx, dtdy,          \
     1317                                                   invQ,                \
     1318                                                   twidth0, theight0 ); \
     1319                    s[1][i] = ss1*invQ1;                                \
     1320                    t[1][i] = tt1*invQ1;                                \
     1321                    u[1][i] = uu1*invQ1;                                \
     1322                    lambda[1][i] = compute_lambda( ds1dx, ds1dy,        \
     1323                                                   dt1dx, dt1dy,        \
     1324                                                   invQ1,               \
     1325                                                   twidth1, theight1 ); \
     1326                    ffz += fdzdx;                                       \
     1327                    ss += dsdx;                                         \
     1328                    tt += dtdx;                                         \
     1329                    uu += dudx;                                         \
     1330                    vv += dvdx;                                         \
     1331                    ss1 += ds1dx;                                       \
     1332                    tt1 += dt1dx;                                       \
     1333                    uu1 += du1dx;                                       \
     1334                    vv1 += dv1dx;                                       \
     1335                 }                                                      \
     1336              }                                                         \
     1337              else {                                                    \
     1338                 for (i=0;i<n;i++) {                                    \
     1339                    GLdouble invQ = 1.0 / vv;                           \
     1340                    GLdouble invQ1 = 1.0 / vv1;                         \
     1341                    zspan[i] = FixedToDepth(ffz);                       \
     1342                    rgba[i][RCOMP] = FixedToInt(ffr);                   \
     1343                    rgba[i][GCOMP] = FixedToInt(ffg);                   \
     1344                    rgba[i][BCOMP] = FixedToInt(ffb);                   \
     1345                    rgba[i][ACOMP] = FixedToInt(ffa);                   \
     1346                    s[0][i] = ss*invQ;                                  \
     1347                    t[0][i] = tt*invQ;                                  \
     1348                    u[0][i] = uu*invQ;                                  \
     1349                    lambda[0][i] = compute_lambda( dsdx, dsdy,          \
     1350                                                   dtdx, dtdy,          \
     1351                                                   invQ,                \
     1352                                                   twidth0, theight0 ); \
     1353                    s[1][i] = ss1*invQ1;                                \
     1354                    t[1][i] = tt1*invQ1;                                \
     1355                    u[1][i] = uu1*invQ1;                                \
     1356                    lambda[1][i] = compute_lambda( ds1dx, ds1dy,        \
     1357                                                   dt1dx, dt1dy,        \
     1358                                                   invQ1,               \
     1359                                                   twidth1, theight1 ); \
     1360                    ffz += fdzdx;                                       \
     1361                    ffr += fdrdx;                                       \
     1362                    ffg += fdgdx;                                       \
     1363                    ffb += fdbdx;                                       \
     1364                    ffa += fdadx;                                       \
     1365                    ss += dsdx;                                         \
     1366                    tt += dtdx;                                         \
     1367                    uu += dudx;                                         \
     1368                    vv += dvdx;                                         \
     1369                    ss1 += ds1dx;                                       \
     1370                    tt1 += dt1dx;                                       \
     1371                    uu1 += du1dx;                                       \
     1372                    vv1 += dv1dx;                                       \
     1373                 }                                                      \
     1374              }                                                         \
     1375              gl_write_multitexture_span( ctx, 2, n, LEFT, Y, zspan,    \
     1376                                      (const GLfloat (*)[MAX_WIDTH]) s, \
     1377                                      (const GLfloat (*)[MAX_WIDTH]) t, \
     1378                                      (const GLfloat (*)[MAX_WIDTH]) u, \
     1379                                      (GLfloat (*)[MAX_WIDTH]) lambda,  \
     1380                                      rgba, NULL, GL_POLYGON );         \
     1381           }                                                            \
     1382        }
    14101383
    14111384#include "tritemp.h"
     
    14771450# define dputs(s)
    14781451#endif
     1452
     1453
    14791454
    14801455/*
     
    14931468      if (ctx->Driver.TriangleFunc) {
    14941469         /* Device driver will draw triangles. */
    1495          return;
     1470         dputs("Driver triangle");
     1471         return;
     1472      }
     1473
     1474      if (ctx->Polygon.SmoothFlag) {
     1475         _mesa_set_aa_triangle_function(ctx);
     1476         ASSERT(ctx->Driver.TriangleFunc);
     1477         return;
    14961478      }
    14971479
    14981480      if (ctx->Texture.ReallyEnabled) {
    14991481         /* Ugh, we do a _lot_ of tests to pick the best textured tri func */
    1500          int format, filter;
    1501         const struct gl_texture_object *current2Dtex = ctx->Texture.Unit[0].CurrentD[2];
     1482         GLint format, filter;
     1483        const struct gl_texture_object *current2Dtex = ctx->Texture.Unit[0].CurrentD[2];
    15021484         const struct gl_texture_image *image;
    15031485         /* First see if we can used an optimized 2-D texture function */
    15041486         if (ctx->Texture.ReallyEnabled==TEXTURE0_2D
    15051487             && current2Dtex->WrapS==GL_REPEAT
    1506              && current2Dtex->WrapT==GL_REPEAT
     1488             && current2Dtex->WrapT==GL_REPEAT
    15071489             && ((image = current2Dtex->Image[current2Dtex->BaseLevel]) != 0)  /* correct! */
    15081490             && image->Border==0
    15091491             && ((format = image->Format)==GL_RGB || format==GL_RGBA)
    1510              && (filter = current2Dtex->MinFilter)==current2Dtex->MagFilter
    1511              && ctx->Light.Model.ColorControl==GL_SINGLE_COLOR) {
    1512 
    1513             if (ctx->Hint.PerspectiveCorrection==GL_FASTEST) {
    1514        
    1515                if (filter==GL_NEAREST
    1516                    && format==GL_RGB
    1517                    && (ctx->Texture.Unit[0].EnvMode==GL_REPLACE
    1518                        || ctx->Texture.Unit[0].EnvMode==GL_DECAL)
    1519                    && ((ctx->RasterMask==DEPTH_BIT
    1520                         && ctx->Depth.Func==GL_LESS
    1521                         && ctx->Depth.Mask==GL_TRUE)
    1522                        || ctx->RasterMask==0)
    1523                    && ctx->Polygon.StippleFlag==GL_FALSE) {
    1524 
    1525                   if (ctx->RasterMask==DEPTH_BIT) {
    1526                      ctx->Driver.TriangleFunc = simple_z_textured_triangle;
    1527                      dputs("simple_z_textured_triangle");
    1528                   }
    1529                   else {
    1530                      ctx->Driver.TriangleFunc = simple_textured_triangle;
    1531                      dputs("simple_textured_triangle");
    1532                   }
    1533                }
    1534                else {
    1535                   ctx->Driver.TriangleFunc = affine_textured_triangle;
    1536                   dputs("affine_textured_triangle");
    1537                }
    1538             }
    1539             else {
    1540                /*ctx->Driver.TriangleFunc = persp_textured_triangle;*/
     1492             && (filter = current2Dtex->MinFilter)==current2Dtex->MagFilter
     1493             && ctx->Light.Model.ColorControl==GL_SINGLE_COLOR) {
     1494
     1495            if (ctx->Hint.PerspectiveCorrection==GL_FASTEST) {
     1496
     1497               if (filter==GL_NEAREST
     1498                   && format==GL_RGB
     1499                   && (ctx->Texture.Unit[0].EnvMode==GL_REPLACE
     1500                       || ctx->Texture.Unit[0].EnvMode==GL_DECAL)
     1501                   && ((ctx->RasterMask==DEPTH_BIT
     1502                        && ctx->Depth.Func==GL_LESS
     1503                        && ctx->Depth.Mask==GL_TRUE)
     1504                       || ctx->RasterMask==0)
     1505                   && ctx->Polygon.StippleFlag==GL_FALSE) {
     1506
     1507                  if (ctx->RasterMask==DEPTH_BIT) {
     1508                     ctx->Driver.TriangleFunc = simple_z_textured_triangle;
     1509                     dputs("simple_z_textured_triangle");
     1510                  }
     1511                  else {
     1512                     ctx->Driver.TriangleFunc = simple_textured_triangle;
     1513                     dputs("simple_textured_triangle");
     1514                  }
     1515               }
     1516               else {
     1517                  if (ctx->Texture.Unit[0].EnvMode==GL_ADD) {
     1518                     ctx->Driver.TriangleFunc = general_textured_triangle;
     1519                     dputs("general_textured_triangle");
     1520                  }
     1521                  else {
     1522                     ctx->Driver.TriangleFunc = affine_textured_triangle;
     1523                     dputs("affine_textured_triangle");
     1524                  }
     1525               }
     1526            }
     1527            else {
     1528               /*ctx->Driver.TriangleFunc = persp_textured_triangle;*/
    15411529               ctx->Driver.TriangleFunc = general_textured_triangle;
    1542                dputs("persp_textured_triangle");
    1543             }
    1544         }
     1530               dputs("persp_textured_triangle");
     1531            }
     1532        }
    15451533         else {
    15461534            /* More complicated textures (mipmap, multi-tex, sep specular) */
     
    15581546               /* multi-texture! */
    15591547               ctx->Driver.TriangleFunc = lambda_multitextured_triangle;
    1560                dputs("lambda_multitextured_triangle");
     1548               dputs("lambda_multitextured_triangle");
    15611549            }
    15621550            else if (ctx->Light.Enabled &&
     
    15651553               if (needLambda) {
    15661554                  ctx->Driver.TriangleFunc = lambda_textured_spec_triangle;
    1567                   dputs("lambda_textured_spec_triangle");
    1568                }
     1555                  dputs("lambda_textured_spec_triangle");
     1556               }
    15691557               else {
    15701558                  ctx->Driver.TriangleFunc = general_textured_spec_triangle;
    1571                   dputs("general_textured_spec_triangle");
    1572                }
     1559                  dputs("general_textured_spec_triangle");
     1560               }
    15731561            }
    15741562            else {
    15751563               if (needLambda) {
    15761564                  ctx->Driver.TriangleFunc = lambda_textured_triangle;
    1577                   dputs("lambda_textured_triangle");
    1578                }
     1565                  dputs("lambda_textured_triangle");
     1566               }
    15791567               else {
    15801568                  ctx->Driver.TriangleFunc = general_textured_triangle;
    1581                   dputs("general_textured_triangle");
    1582                }
     1569                  dputs("general_textured_triangle");
     1570               }
    15831571            }
    15841572         }
    15851573      }
    15861574      else {
    1587          if (ctx->Light.ShadeModel==GL_SMOOTH) {
    1588             /* smooth shaded, no texturing, stippled or some raster ops */
    1589             if (rgbmode)
     1575         if (ctx->Light.ShadeModel==GL_SMOOTH) {
     1576            /* smooth shaded, no texturing, stippled or some raster ops */
     1577            if (rgbmode) {
     1578               dputs("smooth_rgba_triangle");
    15901579               ctx->Driver.TriangleFunc = smooth_rgba_triangle;
    1591             else
     1580            }
     1581            else {
     1582               dputs("smooth_ci_triangle");
    15921583               ctx->Driver.TriangleFunc = smooth_ci_triangle;
    1593          }
    1594          else {
    1595             /* flat shaded, no texturing, stippled or some raster ops */
    1596             if (rgbmode)
     1584            }
     1585         }
     1586         else {
     1587            /* flat shaded, no texturing, stippled or some raster ops */
     1588            if (rgbmode) {
     1589               dputs("flat_rgba_triangle");
    15971590               ctx->Driver.TriangleFunc = flat_rgba_triangle;
    1598             else
     1591            }
     1592            else {
     1593               dputs("flat_ci_triangle");
    15991594               ctx->Driver.TriangleFunc = flat_ci_triangle;
    1600          }
     1595            }
     1596         }
    16011597      }
    16021598   }
Note: See TracChangeset for help on using the changeset viewer.