]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - model_shared.h
added r_shadow_lightradiusscale cvar (similar to r_shadow_lightintensityscale)
[xonotic/darkplaces.git] / model_shared.h
index f7b2445c5246736bb8ac2fb61ace85aff022b321..405d291c5a54c299ca80245a1a8d940f128912fb 100644 (file)
@@ -72,6 +72,9 @@ typedef struct overridetagnameset_s
 }
 overridetagnameset_t;
 
+struct md3vertex_s;
+struct trivertex_s;
+
 // used for mesh lists in q1bsp/q3bsp map models
 // (the surfaces reference portions of these meshes)
 typedef struct surfmesh_s
@@ -90,10 +93,16 @@ typedef struct surfmesh_s
        int *data_lightmapoffsets; // index into surface's lightmap samples for vertex lighting
        // morph blending, these are zero if model is skeletal or static
        int num_morphframes;
-       float *data_morphvertex3f;
+       struct md3vertex_s *data_morphmd3vertex;
+       struct trivertx_s *data_morphmdlvertex;
+       float *data_morphmd2framesize6f;
+       float num_morphmdlframescale[3];
+       float num_morphmdlframetranslate[3];
        // skeletal blending, these are NULL if model is morph or static
        int *data_vertexweightindex4i;
        float *data_vertexweightinfluence4f;
+       // set if there is some kind of animation on this model
+       qboolean isanimated;
 }
 surfmesh_t;
 
@@ -132,6 +141,8 @@ typedef struct shadowmesh_s
 }
 shadowmesh_t;
 
+#define TEXTURE_MAXFRAMES 64
+
 typedef enum texturelayertype_e
 {
        TEXTURELAYERTYPE_INVALID,
@@ -179,8 +190,16 @@ typedef struct texture_s
        // current material flags (updated each bmodel render)
        int currentmaterialflags;
 
-       // loaded the same as model skins
-       skinframe_t skin;
+       // textures to use when rendering this material
+       skinframe_t *currentskinframe;
+       int numskinframes;
+       float skinframerate;
+       skinframe_t skinframes[TEXTURE_MAXFRAMES];
+       // background layer (for terrain texture blending)
+       skinframe_t *backgroundcurrentskinframe;
+       int backgroundnumskinframes;
+       float backgroundskinframerate;
+       skinframe_t backgroundskinframes[TEXTURE_MAXFRAMES];
 
        // total frames in sequence and alternate sequence
        int anim_total[2];
@@ -201,6 +220,8 @@ typedef struct texture_s
        qboolean colormapping;
        rtexture_t *basetexture;
        rtexture_t *glosstexture;
+       rtexture_t *backgroundbasetexture;
+       rtexture_t *backgroundglosstexture;
        float specularscale;
        float specularpower;
 
@@ -374,12 +395,16 @@ typedef struct model_brush_s
        // these are actually only found on brushq1, but NULL is handled gracefully
        void (*AmbientSoundLevelsForPoint)(struct model_s *model, const vec3_t p, unsigned char *out, int outsize);
        void (*RoundUpToHullSize)(struct model_s *cmodel, const vec3_t inmins, const vec3_t inmaxs, vec3_t outmins, vec3_t outmaxs);
+       // trace a line of sight through this model (returns false if the line if sight is definitely blocked)
+       qboolean (*TraceLineOfSight)(struct model_s *model, const vec3_t start, const vec3_t end);
 
        char skybox[MAX_QPATH];
 
        rtexture_t *solidskytexture;
        rtexture_t *alphaskytexture;
 
+       qboolean supportwateralpha;
+
        // QuakeWorld
        int qw_md4sum;
        int qw_md4sum2;
@@ -455,7 +480,10 @@ typedef struct model_brushq3_s
 
        // lightmap textures
        int num_lightmaps;
+       int num_lightmapmergepower;
+       int num_lightmapmerge;
        rtexture_t **data_lightmaps;
+       rtexture_t **data_deluxemaps;
 
        // voxel light data with directional shading
        int num_lightgrid;
@@ -561,9 +589,9 @@ typedef struct model_s
        // 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);
        // compile a shadow volume for the model based on light source
-       void(*CompileShadowVolume)(struct entity_render_s *ent, vec3_t relativelightorigin, float lightradius, int numsurfaces, const int *surfacelist);
+       void(*CompileShadowVolume)(struct entity_render_s *ent, vec3_t relativelightorigin, vec3_t relativelightdirection, float lightradius, int numsurfaces, const int *surfacelist);
        // draw a shadow volume for the model based on light source
-       void(*DrawShadowVolume)(struct entity_render_s *ent, vec3_t relativelightorigin, float lightradius, int numsurfaces, const int *surfacelist, const vec3_t lightmins, const vec3_t lightmaxs);
+       void(*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);
        // draw the lighting on a model (through stencil)
        void(*DrawLight)(struct entity_render_s *ent, int numsurfaces, const int *surfacelist);
        // trace a box against this model
@@ -594,6 +622,7 @@ extern unsigned char *mod_base;
 extern cvar_t r_fullbrights;
 
 void Mod_Init (void);
+void Mod_Reload (void);
 model_t *Mod_LoadModel(model_t *mod, qboolean crash, qboolean checkdisk, qboolean isworldmodel);
 model_t *Mod_FindName (const char *name);
 model_t *Mod_ForName (const char *name, qboolean crash, qboolean checkdisk, qboolean isworldmodel);
@@ -662,8 +691,8 @@ struct entity_render_s;
 void R_Q1BSP_DrawSky(struct entity_render_s *ent);
 void R_Q1BSP_Draw(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);
-void R_Q1BSP_CompileShadowVolume(struct entity_render_s *ent, vec3_t relativelightorigin, float lightradius, int numsurfaces, const int *surfacelist);
-void R_Q1BSP_DrawShadowVolume(struct entity_render_s *ent, vec3_t relativelightorigin, float lightradius, int numsurfaces, const int *surfacelist, const vec3_t lightmins, const vec3_t lightmaxs);
+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);
 void R_Q1BSP_DrawLight(struct entity_render_s *ent, int numsurfaces, const int *surfacelist);
 
 // alias models