1 #ifndef MSP_GL_UNIFORM_H_
2 #define MSP_GL_UNIFORM_H_
14 Uniform(const Uniform &);
15 Uniform &operator=(const Uniform &);
17 virtual ~Uniform() { }
19 virtual void apply(int) const = 0;
20 virtual Uniform *clone() const = 0;
25 class UniformScalar: public Uniform
35 UniformScalar(Type v): value(v) { }
37 virtual void apply(int index) const;
39 virtual UniformScalar *clone() const
40 { return new UniformScalar(value); }
43 typedef UniformScalar<int> Uniform1i;
44 typedef UniformScalar<float> Uniform1f;
47 template<typename T, unsigned vecsize>
48 class UniformVector: public Uniform
52 typedef T Type[vecsize];
58 UniformVector(const T *vp)
59 { std::copy(vp, vp+vecsize, value); }
61 virtual void apply(int index) const;
63 virtual UniformVector *clone() const
64 { return new UniformVector(value); }
67 typedef UniformVector<float, 2> Uniform2f;
68 typedef UniformVector<float, 3> Uniform3f;
69 typedef UniformVector<float, 4> Uniform4f;
72 template<typename T, unsigned rows, unsigned cols>
73 class UniformMatrix: public Uniform
77 typedef T Type[rows*cols];
83 UniformMatrix(const T *vp)
84 { std::copy(vp, vp+rows*cols, value); }
86 virtual void apply(int index) const;
88 virtual UniformMatrix *clone() const
89 { return new UniformMatrix(value); }
92 typedef UniformMatrix<float, 4, 4> UniformMatrix4x4f;