]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - model_shared.h
Added dp_waterscroll <scale> <speed> shader keyword as simple simulation of water...
[xonotic/darkplaces.git] / model_shared.h
index d19c71bf2c68efd292a2e8a16a1f0e28c13d6641..2f8cc01f2bb5ef2058b13cadc51451c20c02a474 100644 (file)
@@ -232,7 +232,10 @@ typedef enum q3wavefunc_e
        Q3WAVEFUNC_TRIANGLE,
        Q3WAVEFUNC_COUNT
 }
-q3wavefunc_t;
+q3wavefunc_e;
+typedef int q3wavefunc_t;
+#define Q3WAVEFUNC_USER_COUNT 4
+#define Q3WAVEFUNC_USER_SHIFT 8 // use 8 bits for wave func type
 
 typedef enum q3deform_e
 {
@@ -416,6 +419,7 @@ typedef struct q3shaderinfo_s
        float reflectfactor; // amount of reflection distort (1.0 = like the cvar specifies)
        vec4_t reflectcolor4f; // color tint of reflection (including alpha factor)
        float r_water_wateralpha; // additional wateralpha to apply when r_water is active
+       float r_water_waterscroll[2]; // water normalmapscrollblend - scale and speed
 
        // offsetmapping
        dpoffsetmapping_technique_t offsetmapping;
@@ -552,6 +556,7 @@ typedef struct texture_s
        float reflectfactor; // amount of reflection distort (1.0 = like the cvar specifies)
        vec4_t reflectcolor4f; // color tint of reflection (including alpha factor)
        float r_water_wateralpha; // additional wateralpha to apply when r_water is active
+       float r_water_waterscroll[2]; // scale and speed
        int camera_entity; // entity number for use by cameras
 
        // offsetmapping
@@ -824,7 +829,9 @@ typedef struct model_brushq3_s
        // lightmap textures
        int num_originallightmaps;
        int num_mergedlightmaps;
-       int num_lightmapmergepower;
+       int num_lightmapmergedwidthpower;
+       int num_lightmapmergedheightpower;
+       int num_lightmapmergedwidthheightdeluxepower;
        int num_lightmapmerge;
        rtexture_t **data_lightmaps;
        rtexture_t **data_deluxemaps;
@@ -906,6 +913,7 @@ typedef struct model_s
        int                             nummodelbrushes;
        // BIH (Bounding Interval Hierarchy) for this (sub)model
        bih_t                   collision_bih;
+       bih_t                   render_bih; // if not set, use collision_bih instead for rendering purposes too
        // for md3 models
        int                             num_tags;
        int                             num_tagframes;
@@ -961,6 +969,7 @@ 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, const struct frameblend_s *frameblend, const struct skeleton_s *skeleton, struct trace_s *trace, const vec3_t start, const vec3_t boxmins, const vec3_t boxmaxs, const vec3_t end, int hitsupercontentsmask);
+       void (*TraceBrush)(struct model_s *model, const struct frameblend_s *frameblend, const struct skeleton_s *skeleton, struct trace_s *trace, struct colbrushf_s *start, struct colbrushf_s *end, int hitsupercontentsmask);
        // trace a box against this model
        void (*TraceLine)(struct model_s *model, const struct frameblend_s *frameblend, const struct skeleton_s *skeleton, struct trace_s *trace, const vec3_t start, const vec3_t end, int hitsupercontentsmask);
        // trace a point against this model (like PointSuperContents)
@@ -977,6 +986,9 @@ typedef struct model_s
        model_brushq3_t brushq3;
        // flags this model for offseting sounds to the model center (used by brush models)
        int soundfromcenter;
+
+       // if set, the model contains light information (lightmap, or vertexlight)
+       qboolean lit;
 }
 dp_model_t;
 
@@ -1035,6 +1047,7 @@ q3shaderinfo_t *Mod_LookupQ3Shader(const char *name);
 qboolean Mod_LoadTextureFromQ3Shader(texture_t *texture, const char *name, qboolean warnmissing, qboolean fallback, int defaulttexflags);
 
 extern cvar_t r_mipskins;
+extern cvar_t r_mipnormalmaps;
 
 typedef struct skeleton_s
 {
@@ -1113,9 +1126,10 @@ void R_Q1BSP_DrawLight(struct entity_render_s *ent, int numsurfaces, const int *
 void Mod_CollisionBIH_TracePoint(dp_model_t *model, const struct frameblend_s *frameblend, const skeleton_t *skeleton, struct trace_s *trace, const vec3_t start, int hitsupercontentsmask);
 void Mod_CollisionBIH_TraceLine(dp_model_t *model, const struct frameblend_s *frameblend, const skeleton_t *skeleton, struct trace_s *trace, const vec3_t start, const vec3_t end, int hitsupercontentsmask);
 void Mod_CollisionBIH_TraceBox(dp_model_t *model, const struct frameblend_s *frameblend, const skeleton_t *skeleton, struct trace_s *trace, const vec3_t start, const vec3_t boxmins, const vec3_t boxmaxs, const vec3_t end, int hitsupercontentsmask);
+void Mod_CollisionBIH_TraceBrush(dp_model_t *model, const struct frameblend_s *frameblend, const skeleton_t *skeleton, struct trace_s *trace, struct colbrushf_s *start, struct colbrushf_s *end, int hitsupercontentsmask);
 void Mod_CollisionBIH_TracePoint_Mesh(dp_model_t *model, const struct frameblend_s *frameblend, const skeleton_t *skeleton, struct trace_s *trace, const vec3_t start, int hitsupercontentsmask);
 int Mod_CollisionBIH_PointSuperContents_Mesh(struct model_s *model, int frame, const vec3_t point);
-void Mod_MakeCollisionBIH(dp_model_t *model, qboolean userendersurfaces);
+bih_t *Mod_MakeCollisionBIH(dp_model_t *model, qboolean userendersurfaces, bih_t *out);
 
 // alias models
 struct frameblend_s;
@@ -1143,6 +1157,7 @@ void Mod_DARKPLACESMODEL_Load(dp_model_t *mod, void *buffer, void *bufferend);
 void Mod_PSKMODEL_Load(dp_model_t *mod, void *buffer, void *bufferend);
 void Mod_IDSP_Load(dp_model_t *mod, void *buffer, void *bufferend);
 void Mod_IDS2_Load(dp_model_t *mod, void *buffer, void *bufferend);
+void Mod_INTERQUAKEMODEL_Load(dp_model_t *mod, void *buffer, void *bufferend);
 
 #endif // MODEL_SHARED_H