X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=model_shared.h;h=f4e2e3c5aef4e6926d3ca9c5be649575f32dd587;hb=6f1a935ecaf044b18f487094317fcef26a467316;hp=8b8a91a254877f6a4546df51e68bf330bd7be6ed;hpb=2fe74a1bd078fa8684b11fc555d6501cbdd3513c;p=xonotic%2Fdarkplaces.git diff --git a/model_shared.h b/model_shared.h index 8b8a91a2..f4e2e3c5 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]; @@ -190,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; @@ -244,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; @@ -441,6 +432,7 @@ typedef struct q3shaderinfo_s char name[Q3PATHLENGTH]; #define Q3SHADERINFO_COMPARE_START surfaceparms int surfaceparms; + int surfaceflags; int textureflags; int numlayers; qboolean lighting; @@ -454,12 +446,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]; @@ -471,15 +467,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; @@ -596,7 +600,6 @@ typedef struct texture_s char name[64]; int surfaceflags; int supercontents; - int surfaceparms; int textureflags; // reflection @@ -607,15 +610,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; @@ -716,6 +724,8 @@ typedef struct model_brush_s { // true if this model is a HalfLife .bsp file qboolean ishlbsp; + // true if this model is a BSP2 .bsp file (expanded 32bit bsp format for DarkPlaces, RMQ, others?) + qboolean isbsp2; // string of entity definitions (.map format) char *entities; @@ -791,7 +801,7 @@ typedef struct model_brush_s int (*FindBoxClusters)(struct model_s *model, const vec3_t mins, const vec3_t maxs, int maxclusters, int *clusterlist); void (*LightPoint)(struct model_s *model, const vec3_t p, vec3_t ambientcolor, vec3_t diffusecolor, vec3_t diffusenormal); void (*FindNonSolidLocation)(struct model_s *model, const vec3_t in, vec3_t out, vec_t radius); - mleaf_t *(*PointInLeaf)(struct model_s *model, const float *p); + mleaf_t *(*PointInLeaf)(struct model_s *model, const vec3_t p); // 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); @@ -813,7 +823,7 @@ model_brush_t; typedef struct model_brushq1_s { - dmodel_t *submodels; + mmodel_t *submodels; int numvertexes; mvertex_t *vertexes; @@ -971,10 +981,10 @@ typedef struct model_s // for skeletal models int num_bones; aliasbone_t *data_bones; - float num_posescale; // scaling factor from origin in poses6s format (includes divide by 32767) - float num_poseinvscale; // scaling factor to origin in poses6s format (includes multiply by 32767) + float num_posescale; // scaling factor from origin in poses7s format (includes divide by 32767) + float num_poseinvscale; // scaling factor to origin in poses7s format (includes multiply by 32767) int num_poses; - short *data_poses6s; // origin xyz, quat xyz, w implied negative, unit length, values normalized to +/-32767 range + short *data_poses7s; // origin xyz, quat xyzw, unit length, values normalized to +/-32767 range float *data_baseboneposeinverse; // textures of this model int num_textures; @@ -1026,6 +1036,8 @@ typedef struct model_s 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; @@ -1039,6 +1051,7 @@ typedef struct model_s // if set, the model contains light information (lightmap, or vertexlight) qboolean lit; + float lightmapscale; } dp_model_t; @@ -1051,6 +1064,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); @@ -1099,13 +1113,6 @@ qboolean Mod_LoadTextureFromQ3Shader(texture_t *texture, const char *name, qbool extern cvar_t r_mipskins; extern cvar_t r_mipnormalmaps; -typedef struct skeleton_s -{ - const dp_model_t *model; - matrix4x4_t *relativetransforms; -} -skeleton_t; - typedef struct skinfileitem_s { struct skinfileitem_s *next;