X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=model_brush.h;h=0f2aadee76395977c8175c051532d4d3123e2102;hb=bdb63282edaaa746a60ce4f9ddcdd914a4c4395f;hp=fe3adef4ec14a54e88c6f87ea97b1bb8ed047e84;hpb=b8f115ebdfbd188caf85378e66e16ea15ac638aa;p=xonotic%2Fdarkplaces.git diff --git a/model_brush.h b/model_brush.h index fe3adef4..0f2aadee 100644 --- a/model_brush.h +++ b/model_brush.h @@ -61,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; @@ -87,10 +99,12 @@ typedef struct texture_s // 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; @@ -134,29 +148,10 @@ typedef struct } mtexinfo_t; -struct q3meffect_s; -typedef struct msurface_s +typedef struct msurface_lightmapinfo_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; - // mesh for rendering - surfmesh_t mesh; - // index into model->brush.shadowmesh - int num_firstshadowmeshtriangle; - - // the node plane this is on, backwards if SURF_PLANEBACK flag set - mplane_t *plane; // q1bsp - // SURF_ flags - int flags; // q1bsp // texture mapping properties used by this surface mtexinfo_t *texinfo; // q1bsp - // if lightmap settings changed, this forces update - int cached_dlight; // q1bsp // index into d_lightstylevalue array, 255 means not used (black) qbyte styles[MAXLIGHTMAPS]; // q1bsp // RGB lighting data [numstyles][height][width][3] @@ -167,13 +162,40 @@ typedef struct msurface_s int lightmaptexturestride; // q1bsp int texturemins[2]; // q1bsp int extents[2]; // q1bsp - // if this == r_framecount there are dynamic lights on the surface - int dlightframe; // q1bsp - // which dynamic lights are touching this surface - // (only access this if dlightframe is current) - int dlightbits[8]; // q1bsp +} +msurface_lightmapinfo_t; - struct q3meffect_s *effect; // q3bsp +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 } @@ -293,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); @@ -593,7 +612,7 @@ typedef struct } q3dmeshvertex_t; -typedef struct +typedef struct q3deffect_s { char shadername[Q3PATHLENGTH]; int brushindex; @@ -777,14 +796,6 @@ typedef struct q3mbrushside_s } q3mbrushside_t; -typedef struct q3meffect_s -{ - char shadername[Q3PATHLENGTH]; - struct q3mbrush_s *brush; - int unknown; // 5 or -1 -} -q3meffect_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)