]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - model_shared.h
added polygonoffset as a texture property, used on submodels (such as
[xonotic/darkplaces.git] / model_shared.h
index ba863c3e370e5af8ffb3d88403276f37fe83c836..58f15c821fb127b4c1e493b9e951c3d2602473c1 100644 (file)
@@ -182,13 +182,22 @@ typedef struct shadowmesh_s
 }
 shadowmesh_t;
 
+// various flags from shaders, used for special effects not otherwise classified
+// TODO: support these features more directly
+#define Q3TEXTUREFLAG_TWOSIDED 1
+#define Q3TEXTUREFLAG_NOPICMIP 16
+
 #define Q3PATHLENGTH 64
 #define TEXTURE_MAXFRAMES 64
+#define Q3WAVEPARMS 4
+#define Q3DEFORM_MAXPARMS 3
 #define Q3SHADER_MAXLAYERS 8
 #define Q3RGBGEN_MAXPARMS 3
 #define Q3ALPHAGEN_MAXPARMS 1
 #define Q3TCGEN_MAXPARMS 6
 #define Q3TCMOD_MAXPARMS 6
+#define Q3MAXTCMODS 4
+#define Q3MAXDEFORMS 4
 
 typedef enum q3wavefunc_e
 {
@@ -203,6 +212,28 @@ typedef enum q3wavefunc_e
 }
 q3wavefunc_t;
 
+typedef enum q3deform_e
+{
+       Q3DEFORM_NONE,
+       Q3DEFORM_PROJECTIONSHADOW,
+       Q3DEFORM_AUTOSPRITE,
+       Q3DEFORM_AUTOSPRITE2,
+       Q3DEFORM_TEXT0,
+       Q3DEFORM_TEXT1,
+       Q3DEFORM_TEXT2,
+       Q3DEFORM_TEXT3,
+       Q3DEFORM_TEXT4,
+       Q3DEFORM_TEXT5,
+       Q3DEFORM_TEXT6,
+       Q3DEFORM_TEXT7,
+       Q3DEFORM_BULGE,
+       Q3DEFORM_WAVE,
+       Q3DEFORM_NORMAL,
+       Q3DEFORM_MOVE,
+       Q3DEFORM_COUNT
+}
+q3deform_t;
+
 typedef enum q3rgbgen_e
 {
        Q3RGBGEN_IDENTITY,
@@ -259,6 +290,40 @@ typedef enum q3tcmod_e
 }
 q3tcmod_t;
 
+typedef struct q3shaderinfo_layer_rgbgen_s
+{
+       q3rgbgen_t rgbgen;
+       float parms[Q3RGBGEN_MAXPARMS];
+       q3wavefunc_t wavefunc;
+       float waveparms[Q3WAVEPARMS];
+}
+q3shaderinfo_layer_rgbgen_t;
+
+typedef struct q3shaderinfo_layer_alphagen_s
+{
+       q3alphagen_t alphagen;
+       float parms[Q3ALPHAGEN_MAXPARMS];
+       q3wavefunc_t wavefunc;
+       float waveparms[Q3WAVEPARMS];
+}
+q3shaderinfo_layer_alphagen_t;
+
+typedef struct q3shaderinfo_layer_tcgen_s
+{
+       q3tcgen_t tcgen;
+       float parms[Q3TCGEN_MAXPARMS];
+}
+q3shaderinfo_layer_tcgen_t;
+
+typedef struct q3shaderinfo_layer_tcmod_s
+{
+       q3tcmod_t tcmod;
+       float parms[Q3TCMOD_MAXPARMS];
+       q3wavefunc_t wavefunc;
+       float waveparms[Q3WAVEPARMS];
+}
+q3shaderinfo_layer_tcmod_t;
+
 typedef struct q3shaderinfo_layer_s
 {
        int alphatest;
@@ -267,18 +332,22 @@ typedef struct q3shaderinfo_layer_s
        int numframes;
        char texturename[TEXTURE_MAXFRAMES][Q3PATHLENGTH];
        int blendfunc[2];
-       q3rgbgen_t rgbgen;
-       q3alphagen_t alphagen;
-       q3tcgen_t tcgen;
-       q3tcmod_t tcmod;
-       float rgbgen_parms[Q3RGBGEN_MAXPARMS];
-       float alphagen_parms[Q3ALPHAGEN_MAXPARMS];
-       float tcgen_parms[Q3TCGEN_MAXPARMS];
-       float tcmod_parms[Q3TCMOD_MAXPARMS];
-       q3wavefunc_t tcmod_wavefunc;
+       q3shaderinfo_layer_rgbgen_t rgbgen;
+       q3shaderinfo_layer_alphagen_t alphagen;
+       q3shaderinfo_layer_tcgen_t tcgen;
+       q3shaderinfo_layer_tcmod_t tcmods[Q3MAXTCMODS];
 }
 q3shaderinfo_layer_t;
 
+typedef struct q3shaderinfo_deform_s
+{
+       q3deform_t deform;
+       float parms[Q3DEFORM_MAXPARMS];
+       q3wavefunc_t wavefunc;
+       float waveparms[Q3WAVEPARMS];
+}
+q3shaderinfo_deform_t;
+
 typedef struct q3shaderinfo_s
 {
        char name[Q3PATHLENGTH];
@@ -291,6 +360,7 @@ typedef struct q3shaderinfo_s
        q3shaderinfo_layer_t *primarylayer, *backgroundlayer;
        q3shaderinfo_layer_t layers[Q3SHADER_MAXLAYERS];
        char skyboxname[Q3PATHLENGTH];
+       q3shaderinfo_deform_t deforms[Q3MAXDEFORMS];
 }
 q3shaderinfo_t;
 
@@ -341,6 +411,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;
+
        // textures to use when rendering this material
        skinframe_t *currentskinframe;
        int numskinframes;
@@ -369,15 +443,11 @@ typedef struct texture_s
        matrix4x4_t currenttexmatrix;
 
        // various q3 shader features
-       q3rgbgen_t rgbgen;
-       q3alphagen_t alphagen;
-       q3tcgen_t tcgen;
-       q3tcmod_t tcmod;
-       float rgbgen_parms[Q3RGBGEN_MAXPARMS];
-       float alphagen_parms[Q3ALPHAGEN_MAXPARMS];
-       float tcgen_parms[Q3TCGEN_MAXPARMS];
-       float tcmod_parms[Q3TCMOD_MAXPARMS];
-       q3wavefunc_t tcmod_wavefunc;
+       q3shaderinfo_layer_rgbgen_t rgbgen;
+       q3shaderinfo_layer_alphagen_t alphagen;
+       q3shaderinfo_layer_tcgen_t tcgen;
+       q3shaderinfo_layer_tcmod_t tcmods[Q3MAXTCMODS];
+       q3shaderinfo_deform_t deforms[Q3MAXDEFORMS];
 
        qboolean colormapping;
        rtexture_t *basetexture;
@@ -386,6 +456,8 @@ typedef struct texture_s
        rtexture_t *backgroundglosstexture;
        float specularscale;
        float specularpower;
+       // color tint (colormod * currentalpha) used for rtlighting this material
+       float dlightcolor[3];
 
        // from q3 shaders
        int customblendfunc[2];