6 // various flags from shaders, used for special effects not otherwise classified
7 // TODO: support these features more directly
8 #define Q3TEXTUREFLAG_TWOSIDED 1
9 #define Q3TEXTUREFLAG_NOPICMIP 16
10 #define Q3TEXTUREFLAG_POLYGONOFFSET 32
11 #define Q3TEXTUREFLAG_REFRACTION 256
12 #define Q3TEXTUREFLAG_REFLECTION 512
13 #define Q3TEXTUREFLAG_WATERSHADER 1024
14 #define Q3TEXTUREFLAG_CAMERA 2048
15 #define Q3TEXTUREFLAG_TRANSPARENTSORT 4096
17 #define Q3PATHLENGTH 64
18 #define TEXTURE_MAXFRAMES 64
20 #define Q3DEFORM_MAXPARMS 3
21 #define Q3SHADER_MAXLAYERS 8
22 #define Q3RGBGEN_MAXPARMS 3
23 #define Q3ALPHAGEN_MAXPARMS 1
24 #define Q3TCGEN_MAXPARMS 6
25 #define Q3TCMOD_MAXPARMS 6
27 #define Q3MAXDEFORMS 4
29 typedef enum q3wavefunc_e
32 Q3WAVEFUNC_INVERSESAWTOOTH,
41 typedef int q3wavefunc_t;
42 #define Q3WAVEFUNC_USER_COUNT 4
43 #define Q3WAVEFUNC_USER_SHIFT 8 // use 8 bits for wave func type
45 typedef enum q3deform_e
48 Q3DEFORM_PROJECTIONSHADOW,
67 typedef enum q3rgbgen_e
73 Q3RGBGEN_IDENTITYLIGHTING,
74 Q3RGBGEN_LIGHTINGDIFFUSE,
75 Q3RGBGEN_ONEMINUSENTITY,
76 Q3RGBGEN_ONEMINUSVERTEX,
83 typedef enum q3alphagen_e
88 Q3ALPHAGEN_LIGHTINGSPECULAR,
89 Q3ALPHAGEN_ONEMINUSENTITY,
90 Q3ALPHAGEN_ONEMINUSVERTEX,
98 typedef enum q3tcgen_e
101 Q3TCGEN_TEXTURE, // very common
102 Q3TCGEN_ENVIRONMENT, // common
109 typedef enum q3tcmod_e
112 Q3TCMOD_ENTITYTRANSLATE,
124 typedef struct q3shaderinfo_layer_rgbgen_s
127 float parms[Q3RGBGEN_MAXPARMS];
128 q3wavefunc_t wavefunc;
129 float waveparms[Q3WAVEPARMS];
131 q3shaderinfo_layer_rgbgen_t;
133 typedef struct q3shaderinfo_layer_alphagen_s
135 q3alphagen_t alphagen;
136 float parms[Q3ALPHAGEN_MAXPARMS];
137 q3wavefunc_t wavefunc;
138 float waveparms[Q3WAVEPARMS];
140 q3shaderinfo_layer_alphagen_t;
142 typedef struct q3shaderinfo_layer_tcgen_s
145 float parms[Q3TCGEN_MAXPARMS];
147 q3shaderinfo_layer_tcgen_t;
149 typedef struct q3shaderinfo_layer_tcmod_s
152 float parms[Q3TCMOD_MAXPARMS];
153 q3wavefunc_t wavefunc;
154 float waveparms[Q3WAVEPARMS];
156 q3shaderinfo_layer_tcmod_t;
158 typedef struct q3shaderinfo_layer_s
167 q3shaderinfo_layer_rgbgen_t rgbgen;
168 q3shaderinfo_layer_alphagen_t alphagen;
169 q3shaderinfo_layer_tcgen_t tcgen;
170 q3shaderinfo_layer_tcmod_t tcmods[Q3MAXTCMODS];
172 q3shaderinfo_layer_t;
174 typedef struct q3shaderinfo_deform_s
177 float parms[Q3DEFORM_MAXPARMS];
178 q3wavefunc_t wavefunc;
179 float waveparms[Q3WAVEPARMS];
181 q3shaderinfo_deform_t;
183 typedef enum dpoffsetmapping_technique_s
185 OFFSETMAPPING_OFF, // none
186 OFFSETMAPPING_DEFAULT, // cvar-set
187 OFFSETMAPPING_LINEAR, // linear
188 OFFSETMAPPING_RELIEF // relief
189 }dpoffsetmapping_technique_t;
191 typedef enum dptransparentsort_category_e
194 TRANSPARENTSORT_DISTANCE,
196 }dptransparentsortcategory_t;
198 typedef struct shader_s
200 char name[Q3PATHLENGTH];
201 #define Q3SHADERINFO_COMPARE_START surfaceparms
208 qbool textureblendalpha;
209 q3shaderinfo_layer_t layers[Q3SHADER_MAXLAYERS];
210 char skyboxname[Q3PATHLENGTH];
211 q3shaderinfo_deform_t deforms[Q3MAXDEFORMS];
213 // dp-specific additions:
220 // add collisions to all triangles of the surface
221 qbool dpmeshcollisions;
223 // kill shader based on cvar checks
227 char dpreflectcube[Q3PATHLENGTH];
230 float reflectmin; // when refraction is used, minimum amount of reflection (when looking straight down)
231 float reflectmax; // when refraction is used, maximum amount of reflection (when looking parallel to water)
232 float refractfactor; // amount of refraction distort (1.0 = like the cvar specifies)
233 vec4_t refractcolor4f; // color tint of refraction (including alpha factor)
234 float reflectfactor; // amount of reflection distort (1.0 = like the cvar specifies)
235 vec4_t reflectcolor4f; // color tint of reflection (including alpha factor)
236 float r_water_wateralpha; // additional wateralpha to apply when r_water is active
237 float r_water_waterscroll[2]; // water normalmapscrollblend - scale and speed
240 dpoffsetmapping_technique_t offsetmapping;
242 float offsetbias; // 0 is normal, 1 leads to alpha 0 being neutral and alpha 1 pushing "out"
244 // polygonoffset (only used if Q3TEXTUREFLAG_POLYGONOFFSET)
245 float biaspolygonoffset, biaspolygonfactor;
247 // transparent sort category
248 dptransparentsortcategory_t transparentsort;
251 float specularscalemod;
252 float specularpowermod;
254 // rtlighting ambient addition
255 float rtlightambient;
256 #define Q3SHADERINFO_COMPARE_END rtlightambient
260 typedef struct texture_shaderpass_s
262 qbool alphatest; // FIXME: handle alphafunc properly
265 struct skinframe_s *skinframes[TEXTURE_MAXFRAMES];
267 q3shaderinfo_layer_rgbgen_t rgbgen;
268 q3shaderinfo_layer_alphagen_t alphagen;
269 q3shaderinfo_layer_tcgen_t tcgen;
270 q3shaderinfo_layer_tcmod_t tcmods[Q3MAXTCMODS];
272 texture_shaderpass_t;