X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=model_shared.h;h=bd292ab094db1396a55e94742ac222881cdd56d5;hb=579d8a7ad10a567c0ade9a198e9a690440b58b1a;hp=f8a8dabe4446d97d63a14702c063fe230695bdf9;hpb=311b10bf7c30a704b06423e603b8264e95cdb442;p=xonotic%2Fdarkplaces.git diff --git a/model_shared.h b/model_shared.h index f8a8dabe..bd292ab0 100644 --- a/model_shared.h +++ b/model_shared.h @@ -101,27 +101,20 @@ typedef struct blendweights_s } blendweights_t; -typedef struct r_vertexposition_s -{ - // 12 bytes - float vertex3f[3]; -} -r_vertexposition_t; - typedef struct r_vertexgeneric_s { - // 24 bytes + // 36 bytes float vertex3f[3]; - unsigned char color4ub[4]; + float color4f[4]; float texcoord2f[2]; } r_vertexgeneric_t; typedef struct r_vertexmesh_s { - // 68 bytes + // 80 bytes float vertex3f[3]; - unsigned char color4ub[4]; + float color4f[4]; float texcoordtexture2f[2]; float texcoordlightmap2f[2]; float svector3f[3]; @@ -137,6 +130,7 @@ typedef struct r_meshbuffer_s size_t size; qboolean isindexbuffer; qboolean isdynamic; + qboolean isindex16; char name[MAX_QPATH]; } r_meshbuffer_t; @@ -189,9 +183,8 @@ typedef struct surfmesh_s qboolean isanimated; // vertex and index buffers for rendering - r_vertexposition_t *vertexposition; r_vertexmesh_t *vertexmesh; - r_meshbuffer_t *vertexpositionbuffer; + r_meshbuffer_t *vertex3fbuffer; r_meshbuffer_t *vertexmeshbuffer; } surfmesh_t; @@ -243,9 +236,8 @@ typedef struct shadowmesh_s size_t vbooffset_texcoord2f; // vertex/index buffers for rendering // (created by Mod_ShadowMesh_Finish if possible) - r_vertexposition_t *vertexposition; r_vertexmesh_t *vertexmesh; // usually NULL - r_meshbuffer_t *vertexpositionbuffer; + r_meshbuffer_t *vertex3fbuffer; r_meshbuffer_t *vertexmeshbuffer; // usually NULL } shadowmesh_t; @@ -453,12 +445,16 @@ typedef struct q3shaderinfo_s // dp-specific additions: // shadow control + qboolean dpnortlight; qboolean dpshadow; qboolean dpnoshadow; // add collisions to all triangles of the surface qboolean dpmeshcollisions; + // kill shader based on cvar checks + qboolean dpshaderkill; + // fake reflection char dpreflectcube[Q3PATHLENGTH]; @@ -470,15 +466,23 @@ 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; float offsetscale; + float offsetbias; // 0 is normal, 1 leads to alpha 0 being neutral and alpha 1 pushing "out" + + // polygonoffset (only used if Q3TEXTUREFLAG_POLYGONOFFSET) + float biaspolygonoffset, biaspolygonfactor; // gloss float specularscalemod; float specularpowermod; -#define Q3SHADERINFO_COMPARE_END specularpowermod + + // rtlightning ambient addition + float rtlightambient; +#define Q3SHADERINFO_COMPARE_END rtlightambient } q3shaderinfo_t; @@ -487,7 +491,7 @@ typedef enum texturelayertype_e TEXTURELAYERTYPE_INVALID, TEXTURELAYERTYPE_LITTEXTURE, TEXTURELAYERTYPE_TEXTURE, - TEXTURELAYERTYPE_FOG, + TEXTURELAYERTYPE_FOG } texturelayertype_t; @@ -595,7 +599,6 @@ typedef struct texture_s char name[64]; int surfaceflags; int supercontents; - int surfaceparms; int textureflags; // reflection @@ -606,15 +609,20 @@ 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 dpoffsetmapping_technique_t offsetmapping; float offsetscale; + float offsetbias; // gloss float specularscalemod; float specularpowermod; + + // diffuse and ambient + float rtlightambient; } texture_t; @@ -878,7 +886,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; @@ -960,6 +970,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; @@ -1015,12 +1026,15 @@ 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) void (*TracePoint)(struct model_s *model, const struct frameblend_s *frameblend, const struct skeleton_s *skeleton, struct trace_s *trace, const vec3_t start, int hitsupercontentsmask); // find the supercontents value at a point in this model int (*PointSuperContents)(struct model_s *model, int frame, const vec3_t point); + // trace a line against geometry in this model and report correct texture (used by r_shadow_bouncegrid) + void (*TraceLineAgainstSurfaces)(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); // fields belonging to some types of model model_sprite_t sprite; model_brush_t brush; @@ -1031,6 +1045,10 @@ 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; + float lightmapscale; } dp_model_t; @@ -1043,6 +1061,7 @@ extern unsigned char *mod_base; //extern cvar_t gl_subdivide_size; // texture fullbrights extern cvar_t r_fullbrights; +extern cvar_t r_enableshadowvolumes; void Mod_Init (void); void Mod_Reload (void); @@ -1089,13 +1108,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; - -typedef struct skeleton_s -{ - const dp_model_t *model; - matrix4x4_t *relativetransforms; -} -skeleton_t; +extern cvar_t r_mipnormalmaps; typedef struct skinfileitem_s { @@ -1167,9 +1180,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;