X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=model_brush.h;h=2d2634eb3eac7640f24469415dd8ef12b9e87241;hb=5f31c863165197cd0ad4817d9db91d03133a6c55;hp=ec31becdfda2d75e5ee1400cf58b1a159fad3b25;hpb=1d84e5d2c4212a98cc575ac1fce00160e53b6e62;p=xonotic%2Fdarkplaces.git diff --git a/model_brush.h b/model_brush.h index ec31becd..2d2634eb 100644 --- a/model_brush.h +++ b/model_brush.h @@ -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);