rev |
line source |
nuclear@20
|
1 #ifndef SHADER_H_
|
nuclear@20
|
2 #define SHADER_H_
|
nuclear@20
|
3
|
nuclear@20
|
4 #include <vector>
|
nuclear@22
|
5 #include "vmath/vmath.h"
|
nuclear@20
|
6
|
nuclear@21
|
7 enum SdrDefaultAttrib {
|
nuclear@21
|
8 SDR_ATTR_VERTEX,
|
nuclear@21
|
9 SDR_ATTR_NORMAL,
|
nuclear@21
|
10 SDR_ATTR_TEXCOORD,
|
nuclear@21
|
11 SDR_ATTR_COLOR,
|
nuclear@21
|
12 SDR_ATTR_TANGENT
|
nuclear@21
|
13 };
|
nuclear@21
|
14
|
nuclear@21
|
15
|
nuclear@20
|
16 class SdrProg {
|
nuclear@20
|
17 private:
|
nuclear@20
|
18 std::vector<unsigned int> priv_sdr;
|
nuclear@20
|
19 unsigned int prog;
|
nuclear@20
|
20 mutable bool valid;
|
nuclear@20
|
21
|
nuclear@20
|
22 public:
|
nuclear@21
|
23 static const SdrProg *active;
|
nuclear@21
|
24
|
nuclear@20
|
25 SdrProg();
|
nuclear@20
|
26 ~SdrProg();
|
nuclear@20
|
27
|
nuclear@20
|
28 void create();
|
nuclear@20
|
29 void destroy();
|
nuclear@20
|
30
|
nuclear@20
|
31 bool attach_shader(unsigned int sdr);
|
nuclear@20
|
32
|
nuclear@20
|
33 bool create(unsigned int vsdr, unsigned int psdr);
|
nuclear@20
|
34 bool create(const char *vsrc, const char *psrc);
|
nuclear@20
|
35 bool load(const char *vfname, const char *pfname);
|
nuclear@20
|
36
|
nuclear@20
|
37 bool link() const;
|
nuclear@20
|
38
|
nuclear@20
|
39 int get_uniform(const char *name) const;
|
nuclear@20
|
40 int get_attrib(const char *name) const;
|
nuclear@20
|
41 bool bind_attrib(const char *name, int loc) const;
|
nuclear@21
|
42 void bind_default_attribs() const;
|
nuclear@20
|
43
|
nuclear@20
|
44 bool bind() const;
|
nuclear@21
|
45
|
nuclear@22
|
46 // helper functions for setting uniforms
|
nuclear@22
|
47 void set_uniform(const char *name, int count, const int *val) const;
|
nuclear@22
|
48 void set_uniform(const char *name, int count, const float *val) const;
|
nuclear@22
|
49 void set_uniform(const char *name, const Vector4 &v) const;
|
nuclear@22
|
50
|
nuclear@22
|
51 void set_uniform1i(const char *name, int x) const;
|
nuclear@22
|
52 void set_uniform2i(const char *name, int x, int y) const;
|
nuclear@22
|
53 void set_uniform3i(const char *name, int x, int y, int z) const;
|
nuclear@22
|
54 void set_uniform4i(const char *name, int x, int y, int z, int w) const;
|
nuclear@22
|
55
|
nuclear@22
|
56 void set_uniform1f(const char *name, float x) const;
|
nuclear@22
|
57 void set_uniform2f(const char *name, float x, float y) const;
|
nuclear@22
|
58 void set_uniform3f(const char *name, float x, float y, float z) const;
|
nuclear@22
|
59 void set_uniform4f(const char *name, float x, float y, float z, float w) const;
|
nuclear@22
|
60
|
nuclear@22
|
61 void set_uniform_matrix(const char *name, const float *m) const;
|
nuclear@22
|
62 void set_uniform_matrix(const char *name, const Matrix4x4 &m) const;
|
nuclear@22
|
63
|
nuclear@22
|
64
|
nuclear@21
|
65 unsigned int get_globj() const { return prog; }
|
nuclear@20
|
66 };
|
nuclear@20
|
67
|
nuclear@20
|
68 unsigned int get_shader(const char *name, unsigned int type);
|
nuclear@20
|
69
|
nuclear@21
|
70 SdrProg *get_sdrprog(const char *vfile, const char *pfile);
|
nuclear@21
|
71
|
nuclear@20
|
72 #endif /* SHADER_H_ */
|