rtexture_t *gloss; // glossmap (for dot3)
rtexture_t *glow; // glow only (fullbrights)
rtexture_t *fog; // alpha of the base texture (if not opaque)
+ // accounting data for hash searches:
+ // the compare variables are used to identify internal skins from certain
+ // model formats
+ // (so that two q1bsp maps with the same texture name for different
+ // textures do not have any conflicts)
+ struct skinframe_s *next; // next on hash chain
+ char basename[MAX_QPATH]; // name of this
+ int textureflags; // texture flags to use
+ int comparewidth;
+ int compareheight;
+ int comparecrc;
+ // mark and sweep garbage collection, this value is updated to a new value
+ // on each level change for the used skinframes, if some are not used they
+ // are freed
+ int loadsequence;
+ // on 32bit systems this makes the struct 128 bytes long
+ int padding;
}
skinframe_t;
skinframe_t *currentskinframe;
int numskinframes;
float skinframerate;
- skinframe_t skinframes[TEXTURE_MAXFRAMES];
+ skinframe_t *skinframes[TEXTURE_MAXFRAMES];
// background layer (for terrain texture blending)
skinframe_t *backgroundcurrentskinframe;
int backgroundnumskinframes;
float backgroundskinframerate;
- skinframe_t backgroundskinframes[TEXTURE_MAXFRAMES];
+ skinframe_t *backgroundskinframes[TEXTURE_MAXFRAMES];
// total frames in sequence and alternate sequence
int anim_total[2];
int supercontents;
int surfaceparms;
int textureflags;
-
- //skinframe_t skin;
}
texture_t;
mempool_t *mempool;
// all models use textures...
rtexturepool_t *texturepool;
- // flags from the model file
- int flags;
- // engine calculated flags, ones that can not be set in the file
- int flags2;
+ // EF_* flags (translated from the model file's different flags layout)
+ int effects;
// number of QC accessible frame(group)s in the model
int numframes;
// number of QC accessible skin(group)s in the model
float *data_baseboneposeinverse;
// textures of this model
int num_textures;
+ int num_texturesperskin;
texture_t *data_textures;
// surfaces of this model
int num_surfaces;
void(*DrawSky)(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);
// 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
void Mod_ShadowMesh_CalcBBox(shadowmesh_t *firstmesh, vec3_t mins, vec3_t maxs, vec3_t center, float *radius);
void Mod_ShadowMesh_Free(shadowmesh_t *mesh);
-int Mod_LoadSkinFrame(skinframe_t *skinframe, const char *basename, int textureflags, qboolean loadpantsandshirt, qboolean loadglowtexture);
-int Mod_LoadSkinFrame_Internal(skinframe_t *skinframe, const char *basename, int textureflags, int loadpantsandshirt, int loadglowtexture, const unsigned char *skindata, int width, int height, int bitsperpixel, const unsigned int *palette, const unsigned int *alphapalette);
-
extern cvar_t r_mipskins;
typedef struct skinfileitem_s
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_DrawDepth(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);