X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=model_shared.h;h=fdf71ee182cd11a386015334ec53e94056207004;hb=e0ed43d2d6fdae2375244257789852ecdf38893a;hp=0773c3d1de431bac76d08a35d467781291c7da0b;hpb=97cdef0adb81c4401dcb9cfa292a3eb386214dac;p=xonotic%2Fdarkplaces.git diff --git a/model_shared.h b/model_shared.h index 0773c3d1..fdf71ee1 100644 --- a/model_shared.h +++ b/model_shared.h @@ -90,7 +90,13 @@ typedef struct overridetagnameset_s overridetagnameset_t; struct md3vertex_s; -struct trivertex_s; +struct trivertx_s; +typedef struct texvecvertex_s +{ + signed char svec[3]; + signed char tvec[3]; +} +texvecvertex_t; // used for mesh lists in q1bsp/q3bsp map models // (the surfaces reference portions of these meshes) @@ -125,6 +131,7 @@ typedef struct surfmesh_s int num_morphframes; struct md3vertex_s *data_morphmd3vertex; struct trivertx_s *data_morphmdlvertex; + struct texvecvertex_s *data_morphtexvecvertex; float *data_morphmd2framesize6f; float num_morphmdlframescale[3]; float num_morphmdlframetranslate[3]; @@ -186,17 +193,21 @@ shadowmesh_t; // TODO: support these features more directly #define Q3TEXTUREFLAG_TWOSIDED 1 #define Q3TEXTUREFLAG_NOPICMIP 16 +#define Q3TEXTUREFLAG_POLYGONOFFSET 32 +#define Q3TEXTUREFLAG_REFRACTION 256 +#define Q3TEXTUREFLAG_REFLECTION 512 +#define Q3TEXTUREFLAG_WATERSHADER 1024 #define Q3PATHLENGTH 64 #define TEXTURE_MAXFRAMES 64 #define Q3WAVEPARMS 4 #define Q3DEFORM_MAXPARMS 3 -#define Q3SHADER_MAXLAYERS 8 +#define Q3SHADER_MAXLAYERS 2 // FIXME support more than that (currently only two are used, so why keep more in RAM?) #define Q3RGBGEN_MAXPARMS 3 #define Q3ALPHAGEN_MAXPARMS 1 #define Q3TCGEN_MAXPARMS 6 #define Q3TCMOD_MAXPARMS 6 -#define Q3MAXTCMODS 4 +#define Q3MAXTCMODS 8 #define Q3MAXDEFORMS 4 typedef enum q3wavefunc_e @@ -361,6 +372,13 @@ typedef struct q3shaderinfo_s q3shaderinfo_layer_t layers[Q3SHADER_MAXLAYERS]; char skyboxname[Q3PATHLENGTH]; q3shaderinfo_deform_t deforms[Q3MAXDEFORMS]; + + float reflectmin; // when refraction is used, minimum amount of reflection (when looking straight down) + float reflectmax; // when refraction is used, maximum amount of reflection (when looking parallel to water) + float refractfactor; // amount of refraction distort (1.0 = like the cvar specifies) + vec4_t refractcolor4f; // color tint of refraction (including alpha factor) + float reflectfactor; // amount of reflection distort (1.0 = like the cvar specifies) + vec4_t reflectcolor4f; // color tint of reflection (including alpha factor) } q3shaderinfo_t; @@ -411,6 +429,12 @@ typedef struct texture_s // current material flags (updated each bmodel render) int currentmaterialflags; + // current PolygonOffset values for rendering this material + float currentpolygonfactor; + float currentpolygonoffset; + float basepolygonfactor; + float basepolygonoffset; + // textures to use when rendering this material skinframe_t *currentskinframe; int numskinframes; @@ -452,6 +476,8 @@ typedef struct texture_s rtexture_t *backgroundglosstexture; float specularscale; float specularpower; + // color tint (colormod * currentalpha) used for rtlighting this material + float dlightcolor[3]; // from q3 shaders int customblendfunc[2]; @@ -465,6 +491,14 @@ typedef struct texture_s int supercontents; int surfaceparms; int textureflags; + + // reflection + float reflectmin; // when refraction is used, minimum amount of reflection (when looking straight down) + float reflectmax; // when refraction is used, maximum amount of reflection (when looking parallel to water) + float refractfactor; // amount of refraction distort (1.0 = like the cvar specifies) + vec4_t refractcolor4f; // color tint of refraction (including alpha factor) + float reflectfactor; // amount of reflection distort (1.0 = like the cvar specifies) + vec4_t reflectcolor4f; // color tint of reflection (including alpha factor) } texture_t; @@ -546,6 +580,15 @@ model_sprite_t; struct trace_s; +typedef struct model_brush_lightstyleinfo_s +{ + int style; + int value; + int numsurfaces; + int *surfacelist; +} +model_brush_lightstyleinfo_t; + typedef struct model_brush_s { // true if this model is a HalfLife .bsp file @@ -610,7 +653,7 @@ typedef struct model_brush_s int (*SuperContentsFromNativeContents)(struct model_s *model, int nativecontents); int (*NativeContentsFromSuperContents)(struct model_s *model, int supercontents); unsigned char *(*GetPVS)(struct model_s *model, const vec3_t p); - int (*FatPVS)(struct model_s *model, const vec3_t org, vec_t radius, unsigned char *pvsbuffer, int pvsbufferlength); + int (*FatPVS)(struct model_s *model, const vec3_t org, vec_t radius, unsigned char *pvsbuffer, int pvsbufferlength, qboolean merge); int (*BoxTouchingPVS)(struct model_s *model, const unsigned char *pvs, const vec3_t mins, const vec3_t maxs); int (*BoxTouchingLeafPVS)(struct model_s *model, const unsigned char *pvs, const vec3_t mins, const vec3_t maxs); int (*BoxTouchingVisibleLeafs)(struct model_s *model, const unsigned char *visibleleafs, const vec3_t mins, const vec3_t maxs); @@ -639,9 +682,6 @@ model_brush_t; typedef struct model_brushq1_s { - // lightmap format, set to r_lightmaprgba when model is loaded - int lightmaprgba; - dmodel_t *submodels; int numvertexes; @@ -657,8 +697,9 @@ typedef struct model_brushq1_s int *surfedges; int numclipnodes; - dclipnode_t *clipnodes; + mclipnode_t *clipnodes; + int numhulls; // this variable is only used by MCBSP, other formats know it intuitively hull_t hulls[MAX_MAP_HULLS]; int num_compressedpvs; @@ -669,11 +710,8 @@ typedef struct model_brushq1_s unsigned char *nmaplightdata; // deluxemap file // lightmap update chains for light styles - int light_styles; - unsigned char *light_style; - int *light_stylevalue; - msurface_t ***light_styleupdatechains; - msurface_t **light_styleupdatechainsbuffer; + int num_lightstyles; + model_brush_lightstyleinfo_t *data_lightstyleinfo; } model_brushq1_t; @@ -807,12 +845,18 @@ typedef struct model_s msurface_lightmapinfo_t *data_surfaces_lightmapinfo; // all surfaces belong to this mesh surfmesh_t surfmesh; + // data type of model + const char *modeldatatypestring; // draw the model's sky polygons (only used by brush models) void(*DrawSky)(struct entity_render_s *ent); + // draw refraction/reflection textures for the model's water polygons (only used by brush models) + void(*DrawAddWaterPlanes)(struct entity_render_s *ent); // draw the model using lightmap/dlight shading void(*Draw)(struct entity_render_s *ent); // draw the model to the depth buffer (no color rendering at all) void(*DrawDepth)(struct entity_render_s *ent); + // draw any enabled debugging effects on this model (such as showing triangles, normals, collision brushes...) + void(*DrawDebug)(struct entity_render_s *ent); // gathers info on which clusters and surfaces are lit by light, as well as calculating a bounding box void(*GetLightInfo)(struct entity_render_s *ent, vec3_t relativelightorigin, float lightradius, vec3_t outmins, vec3_t outmaxs, int *outleaflist, unsigned char *outleafpvs, int *outnumleafspointer, int *outsurfacelist, unsigned char *outsurfacepvs, int *outnumsurfacespointer, unsigned char *outshadowtrispvs, unsigned char *outlighttrispvs); // compile a shadow volume for the model based on light source @@ -917,9 +961,11 @@ int Mod_Q1BSP_SuperContentsFromNativeContents(struct model_s *model, int nativec // a lot of model formats use the Q1BSP code, so here are the prototypes... struct entity_render_s; +void R_Q1BSP_DrawAddWaterPlanes(struct entity_render_s *ent); void R_Q1BSP_DrawSky(struct entity_render_s *ent); void R_Q1BSP_Draw(struct entity_render_s *ent); void R_Q1BSP_DrawDepth(struct entity_render_s *ent); +void R_Q1BSP_DrawDebug(struct entity_render_s *ent); void R_Q1BSP_GetLightInfo(struct entity_render_s *ent, vec3_t relativelightorigin, float lightradius, vec3_t outmins, vec3_t outmaxs, int *outleaflist, unsigned char *outleafpvs, int *outnumleafspointer, int *outsurfacelist, unsigned char *outsurfacepvs, int *outnumsurfacespointer, unsigned char *outshadowtrispvs, unsigned char *outlighttrispvs); void R_Q1BSP_CompileShadowVolume(struct entity_render_s *ent, vec3_t relativelightorigin, vec3_t relativelightdirection, float lightradius, int numsurfaces, const int *surfacelist); void R_Q1BSP_DrawShadowVolume(struct entity_render_s *ent, vec3_t relativelightorigin, vec3_t relativelightdirection, float lightradius, int numsurfaces, const int *surfacelist, const vec3_t lightmins, const vec3_t lightmaxs);