Annotation of quake1/d_part.c, revision 1.1.1.3

1.1       root        1: // d_part.c: software driver module for drawing particles
                      2: 
                      3: #include "quakedef.h"
                      4: #include "d_local.h"
                      5: 
                      6: 
                      7: /*
                      8: ==============
                      9: D_EndParticles
                     10: ==============
                     11: */
                     12: void D_EndParticles (void)
                     13: {
                     14: // not used by software driver
                     15: }
                     16: 
                     17: 
                     18: /*
                     19: ==============
                     20: D_StartParticles
                     21: ==============
                     22: */
                     23: void D_StartParticles (void)
                     24: {
                     25: // not used by software driver
                     26: }
                     27: 
                     28: 
1.1.1.3 ! root       29: #if    !id386
1.1       root       30: 
                     31: /*
                     32: ==============
                     33: D_DrawParticle
                     34: ==============
                     35: */
                     36: void D_DrawParticle (particle_t *pparticle)
                     37: {
                     38:        vec3_t  local, transformed;
                     39:        float   zi;
                     40:        byte    *pdest;
                     41:        short   *pz;
                     42:        int             i, izi, pix, count, u, v;
                     43: 
                     44: // transform point
                     45:        VectorSubtract (pparticle->org, r_origin, local);
                     46: 
                     47:        transformed[0] = DotProduct(local, r_pright);
                     48:        transformed[1] = DotProduct(local, r_pup);
                     49:        transformed[2] = DotProduct(local, r_ppn);              
                     50: 
                     51:        if (transformed[2] < PARTICLE_Z_CLIP)
                     52:                return;
                     53: 
                     54: // project the point
                     55: // FIXME: preadjust xcenter and ycenter
                     56:        zi = 1.0 / transformed[2];
                     57:        u = (int)(xcenter + zi * transformed[0] + 0.5);
                     58:        v = (int)(ycenter - zi * transformed[1] + 0.5);
                     59: 
                     60:        if ((v > d_vrectbottom_particle) || 
                     61:                (u > d_vrectright_particle) ||
                     62:                (v < d_vrecty) ||
                     63:                (u < d_vrectx))
                     64:        {
                     65:                return;
                     66:        }
                     67: 
                     68:        pz = d_pzbuffer + (d_zwidth * v) + u;
                     69:        pdest = d_viewbuffer + d_scantable[v] + u;
                     70:        izi = (int)(zi * 0x8000);
                     71: 
                     72:        pix = izi >> d_pix_shift;
                     73: 
                     74:        if (pix < d_pix_min)
                     75:                pix = d_pix_min;
                     76:        else if (pix > d_pix_max)
                     77:                pix = d_pix_max;
                     78: 
                     79:        switch (pix)
                     80:        {
                     81:        case 1:
                     82:                count = 1 << d_y_aspect_shift;
                     83: 
                     84:                for ( ; count ; count--, pz += d_zwidth, pdest += screenwidth)
                     85:                {
                     86:                        if (pz[0] <= izi)
                     87:                        {
                     88:                                pz[0] = izi;
                     89:                                pdest[0] = pparticle->color;
                     90:                        }
                     91:                }
                     92:                break;
                     93: 
                     94:        case 2:
                     95:                count = 2 << d_y_aspect_shift;
                     96: 
                     97:                for ( ; count ; count--, pz += d_zwidth, pdest += screenwidth)
                     98:                {
                     99:                        if (pz[0] <= izi)
                    100:                        {
                    101:                                pz[0] = izi;
                    102:                                pdest[0] = pparticle->color;
                    103:                        }
                    104: 
                    105:                        if (pz[1] <= izi)
                    106:                        {
                    107:                                pz[1] = izi;
                    108:                                pdest[1] = pparticle->color;
                    109:                        }
                    110:                }
                    111:                break;
                    112: 
                    113:        case 3:
                    114:                count = 3 << d_y_aspect_shift;
                    115: 
                    116:                for ( ; count ; count--, pz += d_zwidth, pdest += screenwidth)
                    117:                {
                    118:                        if (pz[0] <= izi)
                    119:                        {
                    120:                                pz[0] = izi;
                    121:                                pdest[0] = pparticle->color;
                    122:                        }
                    123: 
                    124:                        if (pz[1] <= izi)
                    125:                        {
                    126:                                pz[1] = izi;
                    127:                                pdest[1] = pparticle->color;
                    128:                        }
                    129: 
                    130:                        if (pz[2] <= izi)
                    131:                        {
                    132:                                pz[2] = izi;
                    133:                                pdest[2] = pparticle->color;
                    134:                        }
                    135:                }
                    136:                break;
                    137: 
                    138:        case 4:
                    139:                count = 4 << d_y_aspect_shift;
                    140: 
                    141:                for ( ; count ; count--, pz += d_zwidth, pdest += screenwidth)
                    142:                {
                    143:                        if (pz[0] <= izi)
                    144:                        {
                    145:                                pz[0] = izi;
                    146:                                pdest[0] = pparticle->color;
                    147:                        }
                    148: 
                    149:                        if (pz[1] <= izi)
                    150:                        {
                    151:                                pz[1] = izi;
                    152:                                pdest[1] = pparticle->color;
                    153:                        }
                    154: 
                    155:                        if (pz[2] <= izi)
                    156:                        {
                    157:                                pz[2] = izi;
                    158:                                pdest[2] = pparticle->color;
                    159:                        }
                    160: 
                    161:                        if (pz[3] <= izi)
                    162:                        {
                    163:                                pz[3] = izi;
                    164:                                pdest[3] = pparticle->color;
                    165:                        }
                    166:                }
                    167:                break;
                    168: 
                    169:        default:
                    170:                count = pix << d_y_aspect_shift;
                    171: 
                    172:                for ( ; count ; count--, pz += d_zwidth, pdest += screenwidth)
                    173:                {
                    174:                        for (i=0 ; i<pix ; i++)
                    175:                        {
                    176:                                if (pz[i] <= izi)
                    177:                                {
                    178:                                        pz[i] = izi;
                    179:                                        pdest[i] = pparticle->color;
                    180:                                }
                    181:                        }
                    182:                }
                    183:                break;
                    184:        }
                    185: }
                    186: 
                    187: #endif // !id386
                    188: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.