X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=model_brush.h;h=0f2aadee76395977c8175c051532d4d3123e2102;hb=05b6edf1a4dac900a2d587ce8f26077642ba1792;hp=535676822fdd0a341154b360c99b852311fc2095;hpb=8f66daf5086f6614cf0e0ab9f8d3d839756f6ee4;p=xonotic%2Fdarkplaces.git diff --git a/model_brush.h b/model_brush.h index 53567682..0f2aadee 100644 --- a/model_brush.h +++ b/model_brush.h @@ -29,6 +29,8 @@ BRUSH MODELS ============================================================================== */ +#define Q3PATHLENGTH 64 + // // in memory representation @@ -59,19 +61,31 @@ mplane_t; #define SHADERSTAGE_NORMAL 1 #define SHADERSTAGE_COUNT 2 -#define SURF_PLANEBACK 2 -#define SURF_DRAWSKY 4 -#define SURF_DRAWTURB 0x10 -#define SURF_LIGHTMAP 0x20 -#define SURF_DRAWNOALPHA 0x100 -#define SURF_DRAWFULLBRIGHT 0x200 -#define SURF_LIGHTBOTHSIDES 0x400 -#define SURF_WATERALPHA 0x4000 // this polygon's alpha is modulated by r_wateralpha -#define SURF_SOLIDCLIP 0x8000 // this polygon blocks movement - -#define SURFRENDER_OPAQUE 0 -#define SURFRENDER_ALPHA 1 -#define SURFRENDER_ADD 2 +//#define SURF_PLANEBACK 2 + +// set for anything to be transparent sorted +#define MATERIALFLAG_TRANSPARENT 1 +// use alpha blend on this material +#define MATERIALFLAG_ALPHA 2 +// use additive blend on this material +#define MATERIALFLAG_ADD 4 +// turn off depth test on this material +#define MATERIALFLAG_NODEPTHTEST 8 +// multiply alpha by r_wateralpha cvar +#define MATERIALFLAG_WATERALPHA 16 +// draw with no lighting +#define MATERIALFLAG_FULLBRIGHT 32 +// drawn as a normal lightmapped wall +#define MATERIALFLAG_WALL 64 +// swirling water effect +#define MATERIALFLAG_WATER 128 +// this surface shows the sky +// skipped if transparent +#define MATERIALFLAG_SKY 256 +// skips drawing the surface +#define MATERIALFLAG_NODRAW 512 +// probably used only on q1bsp water +#define MATERIALFLAG_LIGHTBOTHSIDES 1024 struct entity_render_s; struct texture_s; @@ -79,15 +93,18 @@ struct msurface_s; typedef struct texture_s { + // q1bsp // name - char name[16]; + //char name[16]; // size unsigned int width, height; // SURF_ flags - unsigned int flags; + //unsigned int flags; - // type of rendering (SURFRENDER_ value) - int rendertype; + // base material flags + int basematerialflags; + // current material flags (updated each bmodel render) + int currentmaterialflags; // loaded the same as model skins skinframe_t skin; @@ -104,6 +121,16 @@ typedef struct texture_s struct texture_s *currentframe; // current alpha of the texture float currentalpha; + + // q3bsp + char name[Q3PATHLENGTH]; + char firstpasstexturename[Q3PATHLENGTH]; // used only during loading + int surfaceflags; + int supercontents; + int surfaceparms; + int textureflags; + + //skinframe_t skin; } texture_t; @@ -121,69 +148,56 @@ typedef struct } mtexinfo_t; -typedef struct msurface_s +typedef struct msurface_lightmapinfo_s { - // bounding box for onscreen checks - vec3_t poly_mins; - vec3_t poly_maxs; - - // the node plane this is on, backwards if SURF_PLANEBACK flag set - mplane_t *plane; - // SURF_ flags - int flags; // texture mapping properties used by this surface - mtexinfo_t *texinfo; - - // the lightmap texture fragment to use on the rendering mesh - rtexture_t *lightmaptexture; - // mesh for rendering - surfmesh_t mesh; - // if lightmap settings changed, this forces update - int cached_dlight; - - // surface number, to avoid having to do a divide to find the number of a surface from it's address - int number; - - // center for sorting transparent meshes - vec3_t poly_center; - + mtexinfo_t *texinfo; // q1bsp // index into d_lightstylevalue array, 255 means not used (black) - qbyte styles[MAXLIGHTMAPS]; + qbyte styles[MAXLIGHTMAPS]; // q1bsp // RGB lighting data [numstyles][height][width][3] - qbyte *samples; + qbyte *samples; // q1bsp // stain to apply on lightmap (soot/dirt/blood/whatever) - qbyte *stainsamples; + qbyte *stainsamples; // q1bsp // the stride when building lightmaps to comply with fragment update - int lightmaptexturestride; - int texturemins[2]; - int extents[2]; - - // if this == r_framecount there are dynamic lights on the surface - int dlightframe; - // which dynamic lights are touching this surface - // (only access this if dlightframe is current) - int dlightbits[8]; - // avoid redundent addition of dlights - int lightframe; - - // avoid multiple collision traces with a surface polygon - int colframe; - - // these are just 3D points defining the outline of the polygon, - // no texcoord info (that can be generated from these) - int poly_numverts; - float *poly_verts; - - // index into model->brush.shadowmesh - int num_firstshadowmeshtriangle; - - // neighboring surfaces (one per poly_numverts) - //struct msurface_s **neighborsurfaces; - // currently used only for generating static shadow volumes - int lighttemp_castshadow; - - // avoid redundent surface shadows - int shadowmark; + int lightmaptexturestride; // q1bsp + int texturemins[2]; // q1bsp + int extents[2]; // q1bsp +} +msurface_lightmapinfo_t; + +struct q3deffect_s; +typedef struct msurface_s +{ + // bounding box for onscreen checks + vec3_t mins; + vec3_t maxs; + // the texture to use on the surface + texture_t *texture; + // the lightmap texture fragment to use on the rendering mesh + rtexture_t *lightmaptexture; + + // this surface is part of this mesh + surfmesh_t *groupmesh; + int num_triangles; // number of triangles in the mesh + int num_firsttriangle; // first triangle in the mesh (index into groupmesh) + int num_vertices; // number of vertices in the mesh + int num_firstvertex; // first vertex in the mesh (index into groupmesh) + + // shadow volume building information + int num_firstshadowmeshtriangle; // index into model->brush.shadowmesh + + // lightmaptexture rebuild information not used in q3bsp + int cached_dlight; // q1bsp // forces rebuild of lightmaptexture + msurface_lightmapinfo_t *lightmapinfo; // q1bsp + + // mesh information for collisions (only used by q3bsp curves) + int num_collisiontriangles; // q3bsp + int *data_collisionelement3i; // q3bsp + int num_collisionvertices; // q3bsp + float *data_collisionvertex3f; // q3bsp + struct q3deffect_s *effect; // q3bsp + // FIXME: collisionmarkframe should be kept in a separate array + int collisionmarkframe; // q3bsp // don't collide twice in one trace } msurface_t; @@ -220,8 +234,8 @@ typedef struct mleaf_s // common int clusterindex; // -1 is not in pvs, >= 0 is pvs bit number int areaindex; // q3bsp - int numleaffaces; - int *firstleafface; + int numleafsurfaces; + int *firstleafsurface; int numleafbrushes; // q3bsp int *firstleafbrush; // q3bsp qbyte ambient_sound_level[NUM_AMBIENTS]; // q1bsp @@ -301,9 +315,6 @@ typedef struct mlight_s } mlight_t; -extern rtexture_t *r_notexture; -extern texture_t r_notexture_mip; - struct model_s; void Mod_Q1BSP_Load(struct model_s *mod, void *buffer); void Mod_IBSP_Load(struct model_s *mod, void *buffer); @@ -514,8 +525,6 @@ typedef struct #define Q3LUMP_PVS 16 // potentially visible set; bit[clusters][clusters] (used by rendering) #define Q3HEADER_LUMPS 17 -#define Q3PATHLENGTH 64 - typedef struct { int ident; @@ -603,7 +612,7 @@ typedef struct } q3dmeshvertex_t; -typedef struct +typedef struct q3deffect_s { char shadername[Q3PATHLENGTH]; int brushindex; @@ -771,78 +780,22 @@ q3dpvs_t; #define Q3TEXTUREFLAG_AUTOSPRITE2 32 #define Q3TEXTUREFLAG_ALPHATEST 64 -struct q3msurface_s; -typedef struct q3mtexture_s -{ - char name[Q3PATHLENGTH]; - char firstpasstexturename[Q3PATHLENGTH]; - int surfaceflags; - int supercontents; - int surfaceparms; - int textureflags; - - skinframe_t skin; -} -q3mtexture_t; - -typedef struct q3mmodel_s -{ - vec3_t mins; - vec3_t maxs; - int numfaces; - struct q3msurface_s *firstface; - int numbrushes; - struct q3mbrush_s *firstbrush; -} -q3mmodel_t; - typedef struct q3mbrush_s { struct colbrushf_s *colbrushf; int numbrushsides; struct q3mbrushside_s *firstbrushside; - struct q3mtexture_s *texture; + struct texture_s *texture; } q3mbrush_t; typedef struct q3mbrushside_s { struct mplane_s *plane; - struct q3mtexture_s *texture; + struct texture_s *texture; } q3mbrushside_t; -typedef struct q3meffect_s -{ - char shadername[Q3PATHLENGTH]; - struct q3mbrush_s *brush; - int unknown; // 5 or -1 -} -q3meffect_t; - -typedef struct q3msurface_s -{ - // FIXME: collisionmarkframe should be kept in a separate array - // FIXME: shadowmark should be kept in a separate array - - struct q3mtexture_s *texture; - struct q3meffect_s *effect; - rtexture_t *lightmaptexture; - int collisionmarkframe; // don't collide twice in one trace - // bounding box for culling - float mins[3]; - float maxs[3]; - - surfmesh_t mesh; - - // index into model->brush.shadowmesh - int num_firstshadowmeshtriangle; - - // used for shadow volume generation - int shadowmark; -} -q3msurface_t; - #define CHECKPVSBIT(pvs,b) ((b) >= 0 ? ((pvs)[(b) >> 3] & (1 << ((b) & 7))) : false) #define SETPVSBIT(pvs,b) ((b) >= 0 ? ((pvs)[(b) >> 3] |= (1 << ((b) & 7))) : false) #define CLEARPVSBIT(pvs,b) ((b) >= 0 ? ((pvs)[(b) >> 3] &= ~(1 << ((b) & 7))) : false)