X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Funiform.h;h=8dc43ab5791a7e48b8055297003d5eb3c7f77e4b;hp=780bfe747ca3b2e6232a0791e11ca1b7e64762be;hb=HEAD;hpb=cd1f63c76463bb5ba78f6c3bb13aa40a97f1e004 diff --git a/source/uniform.h b/source/uniform.h deleted file mode 100644 index 780bfe74..00000000 --- a/source/uniform.h +++ /dev/null @@ -1,168 +0,0 @@ -#ifndef MSP_GL_UNIFORM_H_ -#define MSP_GL_UNIFORM_H_ - -#include -#include "program.h" - -namespace Msp { -namespace GL { - -class Uniform -{ -protected: - Uniform() { } -private: - Uniform(const Uniform &); - Uniform &operator=(const Uniform &); -public: - virtual ~Uniform() { } - - virtual void apply(int) const = 0; - virtual void store(const Program::UniformInfo &, void *) const = 0; - virtual Uniform *clone() const = 0; -}; - - -template -class UniformScalar: public Uniform -{ -public: - typedef T BaseType; - typedef T Type; - -private: - Type value; - -public: - UniformScalar(Type v): value(v) { } - - virtual void apply(int index) const - { apply(index, 1, &value); } - - static void apply(int, unsigned, const T *); - - virtual void store(const Program::UniformInfo &info, void *buffer) const - { store(info, buffer, &value); } - - static void store(const Program::UniformInfo &, void *buffer, const T *value) - { *reinterpret_cast(buffer) = *value; } - - virtual UniformScalar *clone() const - { return new UniformScalar(value); } -}; - -typedef UniformScalar Uniform1i; -typedef UniformScalar Uniform1f; - - -template -class UniformVector: public Uniform -{ -public: - typedef T BaseType; - typedef T Type[vecsize]; - -private: - Type value; - -public: - UniformVector(const T *vp) - { std::copy(vp, vp+vecsize, value); } - - virtual void apply(int index) const - { apply(index, 1, value); } - - static void apply(int index, unsigned size, const T *value); - - virtual void store(const Program::UniformInfo &info, void *buffer) const - { store(info, buffer, value); } - - static void store(const Program::UniformInfo &, void *buffer, const T *value) - { std::copy(value, value+vecsize, reinterpret_cast(buffer)); } - - virtual UniformVector *clone() const - { return new UniformVector(value); } -}; - -typedef UniformVector Uniform2f; -typedef UniformVector Uniform3f; -typedef UniformVector Uniform4f; - - -template -class UniformMatrix: public Uniform -{ -public: - typedef T BaseType; - typedef T Type[rows*cols]; - -private: - Type value; - -public: - UniformMatrix(const T *vp) - { std::copy(vp, vp+rows*cols, value); } - - virtual void apply(int index) const - { apply(index, 1, value); } - - static void apply(int index, unsigned size, const T *value); - - virtual void store(const Program::UniformInfo &info, void *buffer) const - { store(info, buffer, value); } - - static void store(const Program::UniformInfo &info, void *buffer, const T *value) - { - for(unsigned i=0; i::store(info, reinterpret_cast(buffer)+i*info.matrix_stride, value+i*rows); - } - - virtual UniformMatrix *clone() const - { return new UniformMatrix(value); } -}; - -typedef UniformMatrix UniformMatrix2x2f; -typedef UniformMatrix UniformMatrix3x3f; -typedef UniformMatrix UniformMatrix4x4f; - - -template -class UniformArray: public Uniform -{ -private: - typedef typename T::BaseType BaseType; - enum { elemsize = sizeof(typename T::Type)/sizeof(typename T::BaseType) }; - - BaseType *values; - unsigned size; - -public: - UniformArray(unsigned n, const BaseType *vp): - size(n) - { - values = new BaseType[elemsize*size]; - std::copy(vp, vp+elemsize*size, values); - } - - ~UniformArray() - { - delete[] values; - } - - virtual void apply(int index) const - { T::apply(index, size, values); } - - virtual void store(const Program::UniformInfo &info, void *buffer) const - { - for(unsigned i=0; i(buffer)+i*info.array_stride, values+i*elemsize); - } - - virtual UniformArray *clone() const - { return new UniformArray(size, values); } -}; - -} // namespace GL -} // namespace Msp - -#endif