X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Funiform.h;h=32779ced0a06cc0206a20982ee57ac4d52024335;hp=70db91dfe0d93fbb8e19eff6a2494214258d37e9;hb=f9c15dc04462b2f1eea1d6bdd71e3ba967b1bd8c;hpb=86af62e6f5a743a08c04dde873f51802af5982c4 diff --git a/source/uniform.h b/source/uniform.h index 70db91df..32779ced 100644 --- a/source/uniform.h +++ b/source/uniform.h @@ -1,11 +1,11 @@ #ifndef MSP_GL_UNIFORM_H_ #define MSP_GL_UNIFORM_H_ +#include + namespace Msp { namespace GL { -class Program; - class Uniform { protected: @@ -21,83 +21,76 @@ public: }; -class Uniform1i: public Uniform +template +class UniformScalar: public Uniform { -private: - int v; - public: - Uniform1i(int v_); - - virtual void apply(int index) const; - virtual Uniform1i *clone() const; -}; - + typedef T BaseType; + typedef T Type; -class Uniform1f: public Uniform -{ private: - float v; + Type value; public: - Uniform1f(float v_); + UniformScalar(Type v): value(v) { } virtual void apply(int index) const; - virtual Uniform1f *clone() const; + + virtual UniformScalar *clone() const + { return new UniformScalar(value); } }; +typedef UniformScalar Uniform1i; +typedef UniformScalar Uniform1f; -class Uniform2f: public Uniform -{ -private: - float v[2]; +template +class UniformVector: public Uniform +{ public: - Uniform2f(float v0, float v1); + typedef T BaseType; + typedef T Type[vecsize]; - virtual void apply(int index) const; - virtual Uniform2f *clone() const; -}; - - -class Uniform3f: public Uniform -{ private: - float v[3]; + Type value; public: - Uniform3f(float v0, float v1, float v2); + UniformVector(const T *vp) + { std::copy(vp, vp+vecsize, value); } virtual void apply(int index) const; - virtual Uniform3f *clone() const; + + virtual UniformVector *clone() const + { return new UniformVector(value); } }; +typedef UniformVector Uniform2f; +typedef UniformVector Uniform3f; +typedef UniformVector Uniform4f; -class Uniform4f: public Uniform -{ -private: - float v[4]; +template +class UniformMatrix: public Uniform +{ public: - Uniform4f(float v0, float v1, float v2, float v3); + typedef T BaseType; + typedef T Type[rows*cols]; - virtual void apply(int index) const; - virtual Uniform4f *clone() const; -}; - - -class UniformMatrix4x4f: public Uniform -{ private: - float v[16]; + Type value; public: - UniformMatrix4x4f(const float *); + UniformMatrix(const T *vp) + { std::copy(vp, vp+rows*cols, value); } virtual void apply(int index) const; - virtual UniformMatrix4x4f *clone() const; + + virtual UniformMatrix *clone() const + { return new UniformMatrix(value); } }; +typedef UniformMatrix UniformMatrix4x4f; + } // namespace GL } // namespace Msp