altEngine
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
shader.h
Go to the documentation of this file.
1 
2 #include "include.h"
3 
4 #ifndef SHADER_H
5 #define SHADER_H
6 
7 class mFont : public Shader
8 {
9 public:
10  int init(Graphics *gfx);
11  void Params(char c, float x, float y, float scale, vec3 &color);
12  virtual void prelink(void);
13 private:
14  int u_scale;
15  int u_xpos;
16  int u_ypos;
17  int u_row;
18  int u_col;
19  int u_color;
20  int texture0;
21 };
22 
23 class Global : public Shader
24 {
25 public:
26  int init(Graphics *gfx);
27  void Params(matrix4 &mvp, int depth = 0);
28  virtual void prelink(void);
29  virtual ~Global();
30 private:
31  int matrix;
32  int texture0;
33  int u_depth;
34 };
35 
36 
37 
38 // Max lights hardware can pass through shaders, gfx card specfic
39 #define MAX_LIGHTS 64
40 #define AMBIENT_LIGHT 0.125f
41 #define NUM_STAGE 4
42 
43 class mLight2 : public Shader
44 {
45 public:
46  int init(Graphics *gfx);
47  void Select();
48  void Params(matrix4 &mvp, vector<Light *> &light_list, size_t num_lights, vec3 &offset, int u_time);
49  void set_shadow_matrix(int index, matrix4 &mvp);
50  void set_matrix(matrix4 &mvp);
51  virtual void prelink(void);
52  void set_max(int max);
53  void set_brightness(float value);
54  void set_exposure(float value);
55  void set_contrast(float value);
56  void set_ambient(float ambient);
57  void set_lightmap(float lightmap);
58  void set_shadowmap(float value);
59  void set_light(float ambient, float lightmap, int num_light);
60  void set_lightmap_stage(int flag);
61  void set_depth(int flag);
62  void set_normalmap(int value);
63  void set_alpha(float value);
64  void set_tone(int value);
65 
66  //sin tri square saw inverse saw
67  //tcMod stretch <func> <base> <amplitude> <phase> <frequency>
68  void tcmod_stretch_sin(float amplitude, float phase, float freq, int tick_num, int index);
69  void tcmod_stretch_sawtooth(float amplitude, float phase, float freq, int tick_num, int index);
70  void tcmod_stretch_inverse_sawtooth(float amplitude, float phase, float freq, int tick_num, int index);
71  void tcmod_stretch_triangle(float amplitude, float phase, float freq, int tick_num, int index);
72  void tcmod_stretch_square(float amplitude, float phase, float freq, int tick_num, int index);
73 
74  void rgbgen_wave_sin(float amplitude, float phase, float freq, int tick_num, int index);
75  void rgbgen_wave_sawtooth(float amplitude, float phase, float freq, int tick_num, int index);
76  void rgbgen_wave_inverse_sawtooth(float amplitude, float phase, float freq, int tick_num, int index);
77  void rgbgen_wave_triangle(float amplitude, float phase, float freq, int tick_num, int index);
78  void rgbgen_wave_square(float amplitude, float phase, float freq, int tick_num, int index);
79 
80  void set_fog(float fog, float start, float end, vec3 &color);
81  void set_clip(vec4 *plane);
82 
83 
84  void tcmod_scroll(vec2 &scroll, int index);
85  void tcmod_scale(vec2 &scale, int index);
86  void tcmod_rotate(float deg, int index);
87 
88 
89  void alphatest(int stage, int mode);
90  void envmap(int stage, int env);
91  void turb(int stage, int turb);
92  void rgbgen_scale(int stage, float scale);
93  void portal(int portal);
94 
95  void set_num_shadowmap(int value);
96 
97 
98 
100  float m_ambient;
102  float m_exposure;
103  float m_lightmap;
104  float m_shadowmap;
105  float m_contrast;
106  float m_alpha;
107  int m_tone;
108 private:
109  int matrix;
110 
114 
123  int u_portal;
125  int u_alpha;
126 
127 
128  int shadow_matrix[18];
129  int depth[18];
130 
131 
132  int u_time;
140  int u_depth;
144  int u_color;
145 
146  int u_tone;
147 
148 
149  int u_fog;
153 
154 
155  int u_clip0;
156  int u_clip1;
157  int u_clip2;
158  int u_clip3;
159 
160 
161 
162  float m_fog;
164  float m_start;
165  float m_end;
166 
167 
168  float m_normalmap;
170  unsigned int max_light;
171 };
172 
173 #define POST_EDGE 0
174 #define POST_BLUR 1
175 #define POST_EMBOSS 2
176 #define POST_BLOOM 3
177 #define POST_COMBINE 4
178 #define POST_MASK 5
179 #define POST_RAY 6
180 #define POST_RADIAL 7
181 #define POST_GRADING 8
182 #define POST_WAVE 9
183 #define POST_HSV 10
184 #define POST_DOF 11
185 
186 
187 class Post : public Shader
188 {
189 public:
190  int init(Graphics *gfx);
191  void resize(int width, int height);
192  void Params(int type, int framestep);
193  void BloomParams(int dir, float amount, float strength, float scale, int xres, int yres);
194 
195  virtual void prelink(void);
196 
197  unsigned int image, swap, swap2;
198 private:
199  int texture0;
200  int texture1;
201  int texture2;
202 
204  int u_type;
205  int u_time;
206 
207  int u_dir;
208  int u_xres;
209  int u_yres;
210 
211  int u_amount;
213  int u_scale;
214  float texCoordOffsets[18];
215 };
216 
217 class ParticleUpdate : public Shader
218 {
219 public:
220  int init(Graphics *gfx);
221  void Params(emitter_t &emit);
222  int step(Graphics &gfx, emitter_t &emit);
223 
224  virtual void prelink(void);
225 
226  unsigned int ParticleBufferA;
227  unsigned int ParticleBufferB;
228  static unsigned int max_particles;
229 
230 private:
239 
242  int u_seed;
243 
244  // non uniform
245 
246  // we dont store all particles, just generators to get it started, everything stays on GPU
248 
249  // This count is *all* the particles
250  unsigned int num_particle;
251 
252  unsigned int query;
253 // emitter_t emitter;
254 };
255 
256 class ParticleRender : public Shader
257 {
258 public:
259  int init(Graphics *gfx);
260  void Params(matrix4 &mvp, vec3 &quad1, vec3 &quad2, float x, float y, float z);
261  void render(Graphics &gfx, int start, int vbo, int num);
262 
263  virtual void prelink(void);
264 
265  int ibo;
266 private:
267  int u_mvp;
268  int u_quad1;
269  int u_quad2;
271  int u_xshift;
272  int u_yshift;
273  int u_zshift;
274 };
275 
276 
277 
278 class ScreenSpace : public Shader
279 {
280 public:
281  int init(Graphics *gfx);
282  void Params(float radius, float objectlevel, float ssaolevel, bool randomize_points, int point_count, int width, int height);
283  virtual void prelink(void);
284 
285 private:
286  int u_radius;
291  int u_width;
292  int u_height;
293 
294  unsigned int points_buffer;
295 };
296 
297 #endif