Annotation of quake1/model.h, revision 1.1

1.1     ! root        1: 
        !             2: #ifndef __MODEL__
        !             3: #define __MODEL__
        !             4: 
        !             5: #include "modelgen.h"
        !             6: #include "spritegn.h"
        !             7: 
        !             8: /*
        !             9: 
        !            10: d*_t structures are on-disk representations
        !            11: m*_t structures are in-memory
        !            12: 
        !            13: */
        !            14: 
        !            15: /*
        !            16: ==============================================================================
        !            17: 
        !            18: BRUSH MODELS
        !            19: 
        !            20: ==============================================================================
        !            21: */
        !            22: 
        !            23: 
        !            24: //
        !            25: // in memory representation
        !            26: //
        !            27: // !!! if this is changed, it must be changed in asm_draw.h too !!!
        !            28: typedef struct
        !            29: {
        !            30:        vec3_t          position;
        !            31: } mvertex_t;
        !            32: 
        !            33: #define        SIDE_FRONT      0
        !            34: #define        SIDE_BACK       1
        !            35: #define        SIDE_ON         2
        !            36: 
        !            37: 
        !            38: // plane_t structure
        !            39: // !!! if this is changed, it must be changed in asm_i386.h too !!!
        !            40: typedef struct mplane_s
        !            41: {
        !            42:        vec3_t  normal;
        !            43:        float   dist;
        !            44:        byte    type;                   // for texture axis selection and fast side tests
        !            45:        byte    signbits;               // signx + signy<<1 + signz<<1
        !            46:        byte    pad[2];
        !            47: } mplane_t;
        !            48: 
        !            49: typedef struct texture_s
        !            50: {
        !            51:        char            name[16];
        !            52:        unsigned        width, height;
        !            53:        int                     anim_total;                             // total tenths in sequence ( 0 = no)
        !            54:        int                     anim_min, anim_max;             // time for this frame min <=time< max
        !            55:        struct texture_s *anim_next;            // in the animation sequence
        !            56:        struct texture_s *alternate_anims;      // bmodels in frmae 1 use these
        !            57:        unsigned        offsets[MIPLEVELS];             // four mip maps stored
        !            58: } texture_t;
        !            59: 
        !            60: 
        !            61: #define        SURF_PLANEBACK          2
        !            62: #define        SURF_DRAWSKY            4
        !            63: #define SURF_DRAWSPRITE                8
        !            64: #define SURF_DRAWTURB          0x10
        !            65: #define SURF_DRAWTILED         0x20
        !            66: #define SURF_DRAWBACKGROUND    0x40
        !            67: 
        !            68: // !!! if this is changed, it must be changed in asm_draw.h too !!!
        !            69: typedef struct
        !            70: {
        !            71:        unsigned short  v[2];
        !            72:        unsigned int    cachededgeoffset;
        !            73: } medge_t;
        !            74: 
        !            75: typedef struct
        !            76: {
        !            77:        float           vecs[2][4];
        !            78:        float           mipadjust;
        !            79:        texture_t       *texture;
        !            80:        int                     flags;
        !            81: } mtexinfo_t;
        !            82: 
        !            83: typedef struct msurface_s
        !            84: {
        !            85:        int                     visframe;               // should be drawn when node is crossed
        !            86: 
        !            87:        int                     dlightframe;
        !            88:        int                     dlightbits;
        !            89: 
        !            90:        mplane_t        *plane;
        !            91:        int                     flags;
        !            92: 
        !            93:        int                     firstedge;      // look up in model->surfedges[], negative numbers
        !            94:        int                     numedges;       // are backwards edges
        !            95:        
        !            96: // surface generation data
        !            97:        struct surfcache_s      *cachespots[MIPLEVELS];
        !            98: 
        !            99:        short           texturemins[2];
        !           100:        short           extents[2];
        !           101: 
        !           102:        mtexinfo_t      *texinfo;
        !           103:        
        !           104: // lighting info
        !           105:        byte            styles[MAXLIGHTMAPS];
        !           106:        byte            *samples;               // [numstyles*surfsize]
        !           107: } msurface_t;
        !           108: 
        !           109: typedef struct mnode_s
        !           110: {
        !           111: // common with leaf
        !           112:        int                     contents;               // 0, to differentiate from leafs
        !           113:        int                     visframe;               // node needs to be traversed if current
        !           114:        
        !           115:        short           minmaxs[6];             // for bounding box culling
        !           116: 
        !           117:        struct mnode_s  *parent;
        !           118: 
        !           119: // node specific
        !           120:        mplane_t        *plane;
        !           121:        struct mnode_s  *children[2];   
        !           122: 
        !           123:        unsigned short          firstsurface;
        !           124:        unsigned short          numsurfaces;
        !           125: } mnode_t;
        !           126: 
        !           127: 
        !           128: 
        !           129: typedef struct mleaf_s
        !           130: {
        !           131: // common with node
        !           132:        int                     contents;               // wil be a negative contents number
        !           133:        int                     visframe;               // node needs to be traversed if current
        !           134: 
        !           135:        short           minmaxs[6];             // for bounding box culling
        !           136: 
        !           137:        struct mnode_s  *parent;
        !           138: 
        !           139: // leaf specific
        !           140:        byte            *compressed_vis;
        !           141:        efrag_t         *efrags;
        !           142: 
        !           143:        msurface_t      **firstmarksurface;
        !           144:        int                     nummarksurfaces;
        !           145:        int                     key;                    // BSP sequence number for leaf's contents
        !           146:        byte            ambient_sound_level[NUM_AMBIENTS];
        !           147: } mleaf_t;
        !           148: 
        !           149: // !!! if this is changed, it must be changed in asm_i386.h too !!!
        !           150: typedef struct
        !           151: {
        !           152:        dclipnode_t     *clipnodes;
        !           153:        mplane_t        *planes;
        !           154:        int                     firstclipnode;
        !           155:        int                     lastclipnode;
        !           156:        vec3_t          clip_mins;
        !           157:        vec3_t          clip_maxs;
        !           158: } hull_t;
        !           159: 
        !           160: /*
        !           161: ==============================================================================
        !           162: 
        !           163: SPRITE MODELS
        !           164: 
        !           165: ==============================================================================
        !           166: */
        !           167: 
        !           168: 
        !           169: // FIXME: shorten these?
        !           170: typedef struct mspriteframe_s
        !           171: {
        !           172:        int             width;
        !           173:        int             height;
        !           174:        void    *pcachespot;                    // remove?
        !           175:        float   up, down, left, right;
        !           176:        byte    pixels[4];
        !           177: } mspriteframe_t;
        !           178: 
        !           179: typedef struct
        !           180: {
        !           181:        int                             numframes;
        !           182:        float                   *intervals;
        !           183:        mspriteframe_t  *frames[1];
        !           184: } mspritegroup_t;
        !           185: 
        !           186: typedef struct
        !           187: {
        !           188:        spriteframetype_t       type;
        !           189:        mspriteframe_t          *frameptr;
        !           190: } mspriteframedesc_t;
        !           191: 
        !           192: typedef struct
        !           193: {
        !           194:        int                                     type;
        !           195:        int                                     maxwidth;
        !           196:        int                                     maxheight;
        !           197:        int                                     numframes;
        !           198:        float                           beamlength;             // remove?
        !           199:        void                            *cachespot;             // remove?
        !           200:        mspriteframedesc_t      frames[1];
        !           201: } msprite_t;
        !           202: 
        !           203: 
        !           204: /*
        !           205: ==============================================================================
        !           206: 
        !           207: ALIAS MODELS
        !           208: 
        !           209: Alias models are position independent, so the cache manager can move them.
        !           210: ==============================================================================
        !           211: */
        !           212: 
        !           213: typedef struct
        !           214: {
        !           215:        aliasframetype_t        type;
        !           216:        trivertx_t                      bboxmin;
        !           217:        trivertx_t                      bboxmax;
        !           218:        int                                     frame;
        !           219:        char                            name[16];
        !           220: } maliasframedesc_t;
        !           221: 
        !           222: typedef struct
        !           223: {
        !           224:        aliasskintype_t         type;
        !           225:        void                            *pcachespot;
        !           226:        int                                     skin;
        !           227: } maliasskindesc_t;
        !           228: 
        !           229: typedef struct
        !           230: {
        !           231:        trivertx_t                      bboxmin;
        !           232:        trivertx_t                      bboxmax;
        !           233:        int                                     frame;
        !           234: } maliasgroupframedesc_t;
        !           235: 
        !           236: typedef struct
        !           237: {
        !           238:        int                                             numframes;
        !           239:        int                                             intervals;
        !           240:        maliasgroupframedesc_t  frames[1];
        !           241: } maliasgroup_t;
        !           242: 
        !           243: typedef struct
        !           244: {
        !           245:        int                                     numskins;
        !           246:        int                                     intervals;
        !           247:        maliasskindesc_t        skindescs[1];
        !           248: } maliasskingroup_t;
        !           249: 
        !           250: // !!! if this is changed, it must be changed in asm_draw.h too !!!
        !           251: typedef struct mtriangle_s {
        !           252:        int                                     facesfront;
        !           253:        int                                     vertindex[3];
        !           254: } mtriangle_t;
        !           255: 
        !           256: typedef struct {
        !           257:        int                                     model;
        !           258:        int                                     stverts;
        !           259:        int                                     skindesc;
        !           260:        int                                     triangles;
        !           261:        maliasframedesc_t       frames[1];
        !           262: } aliashdr_t;
        !           263: 
        !           264: //===================================================================
        !           265: 
        !           266: //
        !           267: // Whole model
        !           268: //
        !           269: 
        !           270: typedef enum {mod_brush, mod_sprite, mod_alias} modtype_t;
        !           271: 
        !           272: #define        EF_ROCKET       1                       // leave a trail
        !           273: #define        EF_GRENADE      2                       // leave a trail
        !           274: #define        EF_GIB          4                       // leave a trail
        !           275: #define        EF_ROTATE       8                       // rotate (bonus items)
        !           276: #define        EF_TRACER       16                      // green split trail
        !           277: #define        EF_ZOMGIB       32                      // small blood trail
        !           278: #define        EF_TRACER2      64                      // orange split trail + rotate
        !           279: #define        EF_TRACER3      128                     // purple trail
        !           280: 
        !           281: typedef struct model_s
        !           282: {
        !           283:        char            name[MAX_QPATH];
        !           284:        qboolean        needload;               // bmodels and sprites don't cache normally
        !           285: 
        !           286:        modtype_t       type;
        !           287:        int                     numframes;
        !           288:        synctype_t      synctype;
        !           289:        
        !           290:        int                     flags;
        !           291: 
        !           292: //
        !           293: // volume occupied by the model
        !           294: //             
        !           295:        vec3_t          mins, maxs;
        !           296: 
        !           297: //
        !           298: // brush model
        !           299: //
        !           300:        int                     firstmodelsurface, nummodelsurfaces;
        !           301: 
        !           302:        int                     numsubmodels;
        !           303:        dmodel_t        *submodels;
        !           304: 
        !           305:        int                     numplanes;
        !           306:        mplane_t        *planes;
        !           307: 
        !           308:        int                     numleafs;               // number of visible leafs, not counting 0
        !           309:        mleaf_t         *leafs;
        !           310: 
        !           311:        int                     numvertexes;
        !           312:        mvertex_t       *vertexes;
        !           313: 
        !           314:        int                     numedges;
        !           315:        medge_t         *edges;
        !           316: 
        !           317:        int                     numnodes;
        !           318:        mnode_t         *nodes;
        !           319: 
        !           320:        int                     numtexinfo;
        !           321:        mtexinfo_t      *texinfo;
        !           322: 
        !           323:        int                     numsurfaces;
        !           324:        msurface_t      *surfaces;
        !           325: 
        !           326:        int                     numsurfedges;
        !           327:        int                     *surfedges;
        !           328: 
        !           329:        int                     numclipnodes;
        !           330:        dclipnode_t     *clipnodes;
        !           331: 
        !           332:        int                     nummarksurfaces;
        !           333:        msurface_t      **marksurfaces;
        !           334: 
        !           335:        hull_t          hulls[MAX_MAP_HULLS];
        !           336: 
        !           337:        int                     numtextures;
        !           338:        texture_t       **textures;
        !           339: 
        !           340:        byte            *visdata;
        !           341:        byte            *lightdata;
        !           342:        char            *entities;
        !           343: 
        !           344: //
        !           345: // additional model data
        !           346: //
        !           347:        cache_user_t    cache;          // only access through Mod_Extradata
        !           348: 
        !           349: } model_t;
        !           350: 
        !           351: //============================================================================
        !           352: 
        !           353: void   Mod_Init (void);
        !           354: void   Mod_ClearAll (void);
        !           355: model_t *Mod_ForName (char *name, qboolean crash);
        !           356: void   *Mod_Extradata (model_t *mod);  // handles caching
        !           357: void   Mod_TouchModel (char *name);
        !           358: 
        !           359: mleaf_t *Mod_PointInLeaf (float *p, model_t *model);
        !           360: byte   *Mod_LeafPVS (mleaf_t *leaf, model_t *model);
        !           361: 
        !           362: #endif // __MODEL__

unix.superglobalmegacorp.com

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