]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - model_shared.h
made reconnect command reconnect to the last server you were on, even if it was an...
[xonotic/darkplaces.git] / model_shared.h
index f7b2445c5246736bb8ac2fb61ace85aff022b321..8a2deeb8227e79ccb1243ea11a95fa7516add2fc 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;
 
@@ -380,6 +401,8 @@ typedef struct model_brush_s
        rtexture_t *solidskytexture;
        rtexture_t *alphaskytexture;
 
+       qboolean supportwateralpha;
+
        // QuakeWorld
        int qw_md4sum;
        int qw_md4sum2;
@@ -561,9 +584,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 +617,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 +686,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