]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - model_brush.h
minor whitespace tweak on loc1 label, removed old debugging warnings about not checki...
[xonotic/darkplaces.git] / model_brush.h
index ec31becdfda2d75e5ee1400cf58b1a159fad3b25..2d2634eb3eac7640f24469415dd8ef12b9e87241 100644 (file)
@@ -30,7 +30,6 @@ BRUSH MODELS
 //
 // in memory representation
 //
-// !!! if this is changed, it must be changed in asm_draw.h too !!!
 typedef struct
 {
        vec3_t          position;
@@ -46,24 +45,21 @@ typedef struct mplane_s
 {
        vec3_t  normal;
        float   dist;
-       byte    type;                   // for texture axis selection and fast side tests
-       byte    pad[3];
+       int             type;                   // for texture axis selection and fast side tests
+       // LordHavoc: faster than id's signbits system
        int (*BoxOnPlaneSideFunc) (vec3_t emins, vec3_t emaxs, struct mplane_s *p);
 } mplane_t;
 
 typedef struct texture_s
 {
-       char            name[16];
-       unsigned        width, height;
-       int                     gl_texturenum;
-       int                     gl_glowtexturenum; // LordHavoc: fullbrights on walls
-       struct msurface_s       *texturechain;  // for gl_texsort drawing
-       int                     anim_total;                             // total tenths in sequence ( 0 = no)
-       int                     anim_min, anim_max;             // time for this frame min <=time< max
-       struct texture_s *anim_next;            // in the animation sequence
-       struct texture_s *alternate_anims;      // bmodels in frame 1 use these
-       unsigned        offsets[MIPLEVELS];             // four mip maps stored
-       int                     transparent;    // LordHavoc: transparent texture support
+       char                            name[16];
+       unsigned                        width, height;
+       rtexture_t                      *texture;
+       rtexture_t                      *glowtexture;           // LordHavoc: fullbrights on walls
+       int                                     anim_total;                     // total frames in sequence (0 = not animated)
+       struct texture_s        *anim_frames[10];       // LordHavoc: direct pointers to each of the frames in the sequence
+       struct texture_s        *alternate_anims;       // bmodels in frame 1 use these
+       int                                     transparent;            // LordHavoc: transparent texture support
 } texture_t;
 
 
@@ -74,37 +70,41 @@ typedef struct texture_s
 #define SURF_DRAWTILED         0x20
 #define SURF_DRAWBACKGROUND    0x40
 //#define SURF_UNDERWATER              0x80
-// LordHavoc: added these for lava and teleport textures
 #define SURF_DRAWNOALPHA       0x100
 #define SURF_DRAWFULLBRIGHT    0x200
+#define SURF_LIGHTBOTHSIDES    0x400
+#define SURF_CLIPSOLID         0x800 // this polygon can obscure other polygons
 
-// !!! if this is changed, it must be changed in asm_draw.h too !!!
 typedef struct
 {
        unsigned short  v[2];
-       unsigned int    cachededgeoffset;
 } medge_t;
 
 typedef struct
 {
        float           vecs[2][4];
-       float           mipadjust;
        texture_t       *texture;
        int                     flags;
 } mtexinfo_t;
 
 // LordHavoc: was 7, I added one more for raw lightmap position
+// (xyz st uv l)
 #define        VERTEXSIZE      8
 
 typedef struct glpoly_s
 {
        struct  glpoly_s        *next;
-       struct  glpoly_s        *chain;
        int             numverts;
-       int             flags;                  // for SURF_UNDERWATER
-       float   verts[4][VERTEXSIZE];   // variable sized (xyz s1t1 s2t2)
+       float   verts[4][VERTEXSIZE];   // variable sized
 } glpoly_t;
 
+typedef struct glpolysizeof_s
+{
+       struct  glpoly_s        *next;
+       int             numverts;
+       int             flags;                  // for SURF_UNDERWATER
+} glpolysizeof_t;
+
 typedef struct msurface_s
 {
        int                     visframe;               // should be drawn when node is crossed
@@ -114,27 +114,28 @@ typedef struct msurface_s
 
        int                     firstedge;      // look up in model->surfedges[], negative numbers
        int                     numedges;       // are backwards edges
-       
+
        short           texturemins[2];
        short           extents[2];
 
        short           light_s, light_t;       // gl lightmap coordinates
 
        glpoly_t        *polys;                         // multiple if warped
-       struct  msurface_s      *texturechain;
 
        mtexinfo_t      *texinfo;
-       
+
 // lighting info
        int                     dlightframe;
        int                     dlightbits[8];
 
        int                     lightframe; // avoid redundent addition of dlights
+       int                     worldnodeframe; // only render each surface once
 
        int                     lightmaptexturenum;
        byte            styles[MAXLIGHTMAPS];
        unsigned short  cached_light[MAXLIGHTMAPS];     // values currently used in lightmap
-       int                     cached_lighthalf;                       // LordHavoc: to cause lightmap to be rerendered when lighthalf changes
+       short           cached_dlight;                          // LordHavoc: if lightmap was lit by dynamic lights, update on frame after end of effect to erase it
+       short           cached_lighthalf;                       // LordHavoc: to cause lightmap to be rerendered when lighthalf changes
        float           cached_ambient;                         // LordHavoc: rerender lightmaps when r_ambient changes
        byte            *samples;               // [numstyles*surfsize]
 } msurface_t;
@@ -144,20 +145,17 @@ typedef struct mnode_s
 {
 // common with leaf
        int                     contents;               // 0, to differentiate from leafs
-       int                     visframe;               // node needs to be traversed if current
-       int                     lightframe;             // LordHavoc: to avoid redundent parent chasing in R_VisMarkLights
-       
-       float           minmaxs[6];             // for bounding box culling
 
        struct mnode_s  *parent;
+       struct mportal_s *portals;
 
-       // LordHavoc: node based dynamic lighting
-       int                     dlightbits[8];
-       int                     dlightframe;
+       // for bounding box culling
+       vec3_t          mins;
+       vec3_t          maxs;
 
 // node specific
        mplane_t        *plane;
-       struct mnode_s  *children[2];   
+       struct mnode_s  *children[2];
 
        unsigned short          firstsurface;
        unsigned short          numsurfaces;
@@ -168,25 +166,28 @@ typedef struct mnode_s
 typedef struct mleaf_s
 {
 // common with node
-       int                     contents;               // wil be a negative contents number
-       int                     visframe;               // node needs to be traversed if current
-       int                     lightframe;             // LordHavoc: to avoid redundent parent chasing in R_VisMarkLights
-
-       float           minmaxs[6];             // for bounding box culling
+       int                     contents;               // will be a negative contents number
 
        struct mnode_s  *parent;
+       struct mportal_s *portals;
+
+       // for bounding box culling
+       vec3_t          mins;
+       vec3_t          maxs;
+
+// leaf specific
+       int                     visframe;               // visible if current (r_framecount)
+       int                     worldnodeframe; // used by certain worldnode variants to avoid processing the same leaf twice in a frame
+       int                     portalmarkid;   // used by polygon-through-portals visibility checker
 
-       // LordHavoc: node based dynamic lighting
+       // LordHavoc: leaf based dynamic lighting
        int                     dlightbits[8];
        int                     dlightframe;
 
-// leaf specific
        byte            *compressed_vis;
-       efrag_t         *efrags;
 
        msurface_t      **firstmarksurface;
        int                     nummarksurfaces;
-       int                     key;                    // BSP sequence number for leaf's contents
        byte            ambient_sound_level[NUM_AMBIENTS];
 } mleaf_t;
 
@@ -199,3 +200,23 @@ typedef struct
        vec3_t          clip_mins;
        vec3_t          clip_maxs;
 } hull_t;
+
+typedef struct mportal_s
+{
+       struct mportal_s *next; // the next portal on this leaf
+       mleaf_t *here; // the leaf this portal is on
+       mleaf_t *past; // the leaf through this portal (infront)
+       mvertex_t *points;
+       int numpoints;
+       mplane_t plane;
+       int visframe; // is this portal visible this frame?
+}
+mportal_t;
+
+extern void CL_ParseEntityLump(char *entdata);
+extern rtexture_t *r_notexture;
+extern texture_t r_notexture_mip;
+
+struct model_s;
+extern void Mod_LoadBrushModel (struct model_s *mod, void *buffer);
+extern void Mod_BrushInit(void);