]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - model_shared.h
colormod values above 1 1 1 should work properly with r_glsl now
[xonotic/darkplaces.git] / model_shared.h
index c4b6fe912ad90857818f121771de51575a9b2614..bc030221b27d37f082a9d0a16a2c12b34022812a 100644 (file)
@@ -90,7 +90,13 @@ typedef struct overridetagnameset_s
 overridetagnameset_t;
 
 struct md3vertex_s;
-struct trivertex_s;
+struct trivertx_s;
+typedef struct texvecvertex_s
+{
+       signed char svec[3];
+       signed char tvec[3];
+}
+texvecvertex_t;
 
 // used for mesh lists in q1bsp/q3bsp map models
 // (the surfaces reference portions of these meshes)
@@ -125,6 +131,7 @@ typedef struct surfmesh_s
        int num_morphframes;
        struct md3vertex_s *data_morphmd3vertex;
        struct trivertx_s *data_morphmdlvertex;
+       struct texvecvertex_s *data_morphtexvecvertex;
        float *data_morphmd2framesize6f;
        float num_morphmdlframescale[3];
        float num_morphmdlframetranslate[3];
@@ -187,19 +194,20 @@ shadowmesh_t;
 #define Q3TEXTUREFLAG_TWOSIDED 1
 #define Q3TEXTUREFLAG_NOPICMIP 16
 #define Q3TEXTUREFLAG_POLYGONOFFSET 32
-#define Q3TEXTUREFLAG_REFLECTION 256
-#define Q3TEXTUREFLAG_WATERSHADER 512
+#define Q3TEXTUREFLAG_REFRACTION 256
+#define Q3TEXTUREFLAG_REFLECTION 512
+#define Q3TEXTUREFLAG_WATERSHADER 1024
 
 #define Q3PATHLENGTH 64
 #define TEXTURE_MAXFRAMES 64
 #define Q3WAVEPARMS 4
 #define Q3DEFORM_MAXPARMS 3
-#define Q3SHADER_MAXLAYERS 8
+#define Q3SHADER_MAXLAYERS 2 // FIXME support more than that (currently only two are used, so why keep more in RAM?)
 #define Q3RGBGEN_MAXPARMS 3
 #define Q3ALPHAGEN_MAXPARMS 1
 #define Q3TCGEN_MAXPARMS 6
 #define Q3TCMOD_MAXPARMS 6
-#define Q3MAXTCMODS 4
+#define Q3MAXTCMODS 8
 #define Q3MAXDEFORMS 4
 
 typedef enum q3wavefunc_e
@@ -333,7 +341,7 @@ typedef struct q3shaderinfo_layer_s
        int clampmap;
        float framerate;
        int numframes;
-       char texturename[TEXTURE_MAXFRAMES][Q3PATHLENGTH];
+       char** texturename;
        int blendfunc[2];
        q3shaderinfo_layer_rgbgen_t rgbgen;
        q3shaderinfo_layer_alphagen_t alphagen;
@@ -360,14 +368,17 @@ typedef struct q3shaderinfo_s
        qboolean lighting;
        qboolean vertexalpha;
        qboolean textureblendalpha;
-       q3shaderinfo_layer_t *primarylayer, *backgroundlayer;
+       int primarylayer, backgroundlayer;
        q3shaderinfo_layer_t layers[Q3SHADER_MAXLAYERS];
        char skyboxname[Q3PATHLENGTH];
        q3shaderinfo_deform_t deforms[Q3MAXDEFORMS];
 
-       vec3_t reflectcolor, refractcolor;
-       float reflectfactor; // amount of reflection (1.0 = full, can't be larger)
-       float refractfactor; // amount of refraction distort (1.0 = like the cvar specifies; note that reflection distort is not configurable because that's what the bumpmap should do)
+       float reflectmin; // when refraction is used, minimum amount of reflection (when looking straight down)
+       float reflectmax; // when refraction is used, maximum amount of reflection (when looking parallel to water)
+       float refractfactor; // amount of refraction distort (1.0 = like the cvar specifies)
+       vec4_t refractcolor4f; // color tint of refraction (including alpha factor)
+       float reflectfactor; // amount of reflection distort (1.0 = like the cvar specifies)
+       vec4_t reflectcolor4f; // color tint of reflection (including alpha factor)
 }
 q3shaderinfo_t;
 
@@ -418,11 +429,10 @@ typedef struct texture_s
        // current material flags (updated each bmodel render)
        int currentmaterialflags;
 
-       // current PolygonOffset values for rendering this material
-       float currentpolygonfactor;
-       float currentpolygonoffset;
-       float basepolygonfactor;
-       float basepolygonoffset;
+       // PolygonOffset values for rendering this material
+       // (these are added to the r_refdef values and submodel values)
+       float biaspolygonfactor;
+       float biaspolygonoffset;
 
        // textures to use when rendering this material
        skinframe_t *currentskinframe;
@@ -467,6 +477,10 @@ typedef struct texture_s
        float specularpower;
        // color tint (colormod * currentalpha) used for rtlighting this material
        float dlightcolor[3];
+       // color tint (colormod * 2) used for lightmapped lighting on this material
+       // includes alpha as 4th component
+       // replaces role of gl_Color in GLSL shader
+       float lightmapcolor[4];
 
        // from q3 shaders
        int customblendfunc[2];
@@ -482,9 +496,12 @@ typedef struct texture_s
        int textureflags;
 
        // reflection
-       vec3_t reflectcolor, refractcolor;
-       float reflectfactor; // amount of reflection (1.0 = full, can't be larger)
-       float refractfactor; // amount of refraction distort (1.0 = like the cvar specifies; note that reflection distort is not configurable because that's what the bumpmap should do)
+       float reflectmin; // when refraction is used, minimum amount of reflection (when looking straight down)
+       float reflectmax; // when refraction is used, maximum amount of reflection (when looking parallel to water)
+       float refractfactor; // amount of refraction distort (1.0 = like the cvar specifies)
+       vec4_t refractcolor4f; // color tint of refraction (including alpha factor)
+       float reflectfactor; // amount of reflection distort (1.0 = like the cvar specifies)
+       vec4_t reflectcolor4f; // color tint of reflection (including alpha factor)
 }
 texture_t;
 
@@ -566,6 +583,15 @@ model_sprite_t;
 
 struct trace_s;
 
+typedef struct model_brush_lightstyleinfo_s
+{
+       int style;
+       int value;
+       int numsurfaces;
+       int *surfacelist;
+}
+model_brush_lightstyleinfo_t;
+
 typedef struct model_brush_s
 {
        // true if this model is a HalfLife .bsp file
@@ -659,9 +685,6 @@ model_brush_t;
 
 typedef struct model_brushq1_s
 {
-       // lightmap format, set to r_lightmaprgba when model is loaded
-       int                             lightmaprgba;
-
        dmodel_t                *submodels;
 
        int                             numvertexes;
@@ -679,6 +702,7 @@ typedef struct model_brushq1_s
        int                             numclipnodes;
        mclipnode_t             *clipnodes;
 
+       int                             numhulls;       // this variable is only used by MCBSP, other formats know it intuitively
        hull_t                  hulls[MAX_MAP_HULLS];
 
        int                             num_compressedpvs;
@@ -689,11 +713,8 @@ typedef struct model_brushq1_s
        unsigned char                   *nmaplightdata; // deluxemap file
 
        // lightmap update chains for light styles
-       int                             light_styles;
-       unsigned char                   *light_style;
-       int                             *light_stylevalue;
-       msurface_t              ***light_styleupdatechains;
-       msurface_t              **light_styleupdatechainsbuffer;
+       int                             num_lightstyles;
+       model_brush_lightstyleinfo_t *data_lightstyleinfo;
 }
 model_brushq1_t;