Annotation of quakeworld/client/d_part.c, revision 1.1

1.1     ! root        1: /*
        !             2: Copyright (C) 1996-1997 Id Software, Inc.
        !             3: 
        !             4: This program is free software; you can redistribute it and/or
        !             5: modify it under the terms of the GNU General Public License
        !             6: as published by the Free Software Foundation; either version 2
        !             7: of the License, or (at your option) any later version.
        !             8: 
        !             9: This program is distributed in the hope that it will be useful,
        !            10: but WITHOUT ANY WARRANTY; without even the implied warranty of
        !            11: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
        !            12: 
        !            13: See the GNU General Public License for more details.
        !            14: 
        !            15: You should have received a copy of the GNU General Public License
        !            16: along with this program; if not, write to the Free Software
        !            17: Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
        !            18: 
        !            19: */
        !            20: // d_part.c: software driver module for drawing particles
        !            21: 
        !            22: #include "quakedef.h"
        !            23: #include "d_local.h"
        !            24: 
        !            25: 
        !            26: /*
        !            27: ==============
        !            28: D_EndParticles
        !            29: ==============
        !            30: */
        !            31: void D_EndParticles (void)
        !            32: {
        !            33: // not used by software driver
        !            34: }
        !            35: 
        !            36: 
        !            37: /*
        !            38: ==============
        !            39: D_StartParticles
        !            40: ==============
        !            41: */
        !            42: void D_StartParticles (void)
        !            43: {
        !            44: // not used by software driver
        !            45: }
        !            46: 
        !            47: 
        !            48: #if    !id386
        !            49: 
        !            50: /*
        !            51: ==============
        !            52: D_DrawParticle
        !            53: ==============
        !            54: */
        !            55: void D_DrawParticle (particle_t *pparticle)
        !            56: {
        !            57:        vec3_t  local, transformed;
        !            58:        float   zi;
        !            59:        byte    *pdest;
        !            60:        short   *pz;
        !            61:        int             i, izi, pix, count, u, v;
        !            62: 
        !            63: // transform point
        !            64:        VectorSubtract (pparticle->org, r_origin, local);
        !            65: 
        !            66:        transformed[0] = DotProduct(local, r_pright);
        !            67:        transformed[1] = DotProduct(local, r_pup);
        !            68:        transformed[2] = DotProduct(local, r_ppn);              
        !            69: 
        !            70:        if (transformed[2] < PARTICLE_Z_CLIP)
        !            71:                return;
        !            72: 
        !            73: // project the point
        !            74: // FIXME: preadjust xcenter and ycenter
        !            75:        zi = 1.0 / transformed[2];
        !            76:        u = (int)(xcenter + zi * transformed[0] + 0.5);
        !            77:        v = (int)(ycenter - zi * transformed[1] + 0.5);
        !            78: 
        !            79:        if ((v > d_vrectbottom_particle) || 
        !            80:                (u > d_vrectright_particle) ||
        !            81:                (v < d_vrecty) ||
        !            82:                (u < d_vrectx))
        !            83:        {
        !            84:                return;
        !            85:        }
        !            86: 
        !            87:        pz = d_pzbuffer + (d_zwidth * v) + u;
        !            88:        pdest = d_viewbuffer + d_scantable[v] + u;
        !            89:        izi = (int)(zi * 0x8000);
        !            90: 
        !            91:        pix = izi >> d_pix_shift;
        !            92: 
        !            93:        if (pix < d_pix_min)
        !            94:                pix = d_pix_min;
        !            95:        else if (pix > d_pix_max)
        !            96:                pix = d_pix_max;
        !            97: 
        !            98:        switch (pix)
        !            99:        {
        !           100:        case 1:
        !           101:                count = 1 << d_y_aspect_shift;
        !           102: 
        !           103:                for ( ; count ; count--, pz += d_zwidth, pdest += screenwidth)
        !           104:                {
        !           105:                        if (pz[0] <= izi)
        !           106:                        {
        !           107:                                pz[0] = izi;
        !           108:                                pdest[0] = pparticle->color;
        !           109:                        }
        !           110:                }
        !           111:                break;
        !           112: 
        !           113:        case 2:
        !           114:                count = 2 << 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:                break;
        !           131: 
        !           132:        case 3:
        !           133:                count = 3 << d_y_aspect_shift;
        !           134: 
        !           135:                for ( ; count ; count--, pz += d_zwidth, pdest += screenwidth)
        !           136:                {
        !           137:                        if (pz[0] <= izi)
        !           138:                        {
        !           139:                                pz[0] = izi;
        !           140:                                pdest[0] = pparticle->color;
        !           141:                        }
        !           142: 
        !           143:                        if (pz[1] <= izi)
        !           144:                        {
        !           145:                                pz[1] = izi;
        !           146:                                pdest[1] = pparticle->color;
        !           147:                        }
        !           148: 
        !           149:                        if (pz[2] <= izi)
        !           150:                        {
        !           151:                                pz[2] = izi;
        !           152:                                pdest[2] = pparticle->color;
        !           153:                        }
        !           154:                }
        !           155:                break;
        !           156: 
        !           157:        case 4:
        !           158:                count = 4 << d_y_aspect_shift;
        !           159: 
        !           160:                for ( ; count ; count--, pz += d_zwidth, pdest += screenwidth)
        !           161:                {
        !           162:                        if (pz[0] <= izi)
        !           163:                        {
        !           164:                                pz[0] = izi;
        !           165:                                pdest[0] = pparticle->color;
        !           166:                        }
        !           167: 
        !           168:                        if (pz[1] <= izi)
        !           169:                        {
        !           170:                                pz[1] = izi;
        !           171:                                pdest[1] = pparticle->color;
        !           172:                        }
        !           173: 
        !           174:                        if (pz[2] <= izi)
        !           175:                        {
        !           176:                                pz[2] = izi;
        !           177:                                pdest[2] = pparticle->color;
        !           178:                        }
        !           179: 
        !           180:                        if (pz[3] <= izi)
        !           181:                        {
        !           182:                                pz[3] = izi;
        !           183:                                pdest[3] = pparticle->color;
        !           184:                        }
        !           185:                }
        !           186:                break;
        !           187: 
        !           188:        default:
        !           189:                count = pix << d_y_aspect_shift;
        !           190: 
        !           191:                for ( ; count ; count--, pz += d_zwidth, pdest += screenwidth)
        !           192:                {
        !           193:                        for (i=0 ; i<pix ; i++)
        !           194:                        {
        !           195:                                if (pz[i] <= izi)
        !           196:                                {
        !           197:                                        pz[i] = izi;
        !           198:                                        pdest[i] = pparticle->color;
        !           199:                                }
        !           200:                        }
        !           201:                }
        !           202:                break;
        !           203:        }
        !           204: }
        !           205: 
        !           206: #endif // !id386
        !           207: 

unix.superglobalmegacorp.com

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