X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=model_shared.h;h=c7fc0306a3125c222ab137679642e6ba33a132e0;hb=b3f5f964484b851ef9eb6b714780210693462b4c;hp=00eadd228627381a66dab5a7ae5db03ca63a1211;hpb=d9c2443445df49c61e0107ebcb7e5dc06d978b6c;p=xonotic%2Fdarkplaces.git diff --git a/model_shared.h b/model_shared.h index 00eadd22..c7fc0306 100644 --- a/model_shared.h +++ b/model_shared.h @@ -195,6 +195,11 @@ typedef struct texture_s 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]; @@ -215,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; @@ -388,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; @@ -468,8 +479,12 @@ typedef struct model_brushq3_s q3deffect_t *data_effects; // lightmap textures - int num_lightmaps; + int num_originallightmaps; + int num_mergedlightmaps; + int num_lightmapmergepower; + int num_lightmapmerge; rtexture_t **data_lightmaps; + rtexture_t **data_deluxemaps; // voxel light data with directional shading int num_lightgrid; @@ -573,13 +588,13 @@ typedef struct model_s // draw the model using lightmap/dlight shading void(*Draw)(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); + 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(*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); + 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); // fields belonging to some types of model @@ -665,6 +680,7 @@ int Mod_CountSkinFiles(skinfile_t *skinfile); void Mod_SnapVertices(int numcomponents, int numvertices, float *vertices, float snap); int Mod_RemoveDegenerateTriangles(int numtriangles, const int *inelement3i, int *outelement3i, const float *vertex3f); +void Mod_VertexRangeFromElements(int numelements, const int *elements, int *firstvertexpointer, int *lastvertexpointer); // bsp models void Mod_BrushInit(void); @@ -676,10 +692,10 @@ int Mod_Q1BSP_SuperContentsFromNativeContents(struct model_s *model, int nativec 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_DrawLight(struct entity_render_s *ent, int numsurfaces, const int *surfacelist); +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); +void R_Q1BSP_DrawLight(struct entity_render_s *ent, int numsurfaces, const int *surfacelist, const unsigned char *trispvs); // alias models struct frameblend_s; @@ -704,5 +720,8 @@ void Mod_PSKMODEL_Load(model_t *mod, void *buffer, void *bufferend); void Mod_IDSP_Load(model_t *mod, void *buffer, void *bufferend); void Mod_IDS2_Load(model_t *mod, void *buffer, void *bufferend); +// utility +qboolean Mod_CanSeeBox_Trace(int numsamples, float t, model_t *model, vec3_t eye, vec3_t minsX, vec3_t maxsX); + #endif // MODEL_SHARED_H