X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;ds=sidebyside;f=model_shared.h;h=27869571d277c7ea9627217eb1b8c14947f6569e;hb=7f0dc259ec532846e6b950e34cd5083b001f6f9e;hp=c4b6fe912ad90857818f121771de51575a9b2614;hpb=a8bce569c8a82f5cffacaadea1f5ee9a972f6fda;p=xonotic%2Fdarkplaces.git diff --git a/model_shared.h b/model_shared.h index c4b6fe91..27869571 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]; @@ -187,19 +194,20 @@ shadowmesh_t; #define Q3TEXTUREFLAG_TWOSIDED 1 #define Q3TEXTUREFLAG_NOPICMIP 16 #define Q3TEXTUREFLAG_POLYGONOFFSET 32 -#define Q3TEXTUREFLAG_REFLECTION 256 -#define Q3TEXTUREFLAG_WATERSHADER 512 +#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 @@ -333,7 +341,7 @@ typedef struct q3shaderinfo_layer_s int clampmap; float framerate; int numframes; - char texturename[TEXTURE_MAXFRAMES][Q3PATHLENGTH]; + char** texturename; int blendfunc[2]; q3shaderinfo_layer_rgbgen_t rgbgen; q3shaderinfo_layer_alphagen_t alphagen; @@ -360,14 +368,17 @@ typedef struct q3shaderinfo_s qboolean lighting; qboolean vertexalpha; qboolean textureblendalpha; - q3shaderinfo_layer_t *primarylayer, *backgroundlayer; + int primarylayer, backgroundlayer; q3shaderinfo_layer_t layers[Q3SHADER_MAXLAYERS]; char skyboxname[Q3PATHLENGTH]; q3shaderinfo_deform_t deforms[Q3MAXDEFORMS]; - vec3_t reflectcolor, refractcolor; - float reflectfactor; // amount of reflection (1.0 = full, can't be larger) - float refractfactor; // amount of refraction distort (1.0 = like the cvar specifies; note that reflection distort is not configurable because that's what the bumpmap should do) + 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; @@ -418,11 +429,10 @@ 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; + // PolygonOffset values for rendering this material + // (these are added to the r_refdef values and submodel values) + float biaspolygonfactor; + float biaspolygonoffset; // textures to use when rendering this material skinframe_t *currentskinframe; @@ -467,6 +477,10 @@ typedef struct texture_s float specularpower; // color tint (colormod * currentalpha) used for rtlighting this material float dlightcolor[3]; + // color tint (colormod * 2) used for lightmapped lighting on this material + // includes alpha as 4th component + // replaces role of gl_Color in GLSL shader + float lightmapcolor[4]; // from q3 shaders int customblendfunc[2]; @@ -482,9 +496,12 @@ typedef struct texture_s int textureflags; // reflection - vec3_t reflectcolor, refractcolor; - float reflectfactor; // amount of reflection (1.0 = full, can't be larger) - float refractfactor; // amount of refraction distort (1.0 = like the cvar specifies; note that reflection distort is not configurable because that's what the bumpmap should do) + 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; @@ -500,7 +517,7 @@ typedef struct msurface_lightmapinfo_s { // texture mapping properties used by this surface mtexinfo_t *texinfo; // q1bsp - // index into r_refdef.lightstylevalue array, 255 means not used (black) + // index into r_refdef.scene.lightstylevalue array, 255 means not used (black) unsigned char styles[MAXLIGHTMAPS]; // q1bsp // RGB lighting data [numstyles][height][width][3] unsigned char *samples; // q1bsp @@ -566,12 +583,19 @@ 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 qboolean ishlbsp; - // true if this model is a Martial Concert .bsp file - qboolean ismcbsp; // string of entity definitions (.map format) char *entities; @@ -659,9 +683,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; @@ -689,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; @@ -849,6 +867,8 @@ typedef struct model_s void(*DrawLight)(struct entity_render_s *ent, int numsurfaces, const int *surfacelist, const unsigned char *trispvs); // trace a box against this model void (*TraceBox)(struct model_s *model, int frame, struct trace_s *trace, const vec3_t start, const vec3_t boxmins, const vec3_t boxmaxs, const vec3_t end, int hitsupercontentsmask); + // find the supercontents value at a point in this model + int (*PointSuperContents)(struct model_s *model, int frame, const vec3_t point); // fields belonging to some types of model model_sprite_t sprite; model_brush_t brush;