X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Funiform.h;fp=source%2Funiform.h;h=0000000000000000000000000000000000000000;hp=bc78bab8c1c891ad55086397f2bbcc9250d949a4;hb=7aaec9a70b8d7733429bec043f8e33e02956f266;hpb=bec07999d95b76f4b47cffcc564d0cd0afc0435e diff --git a/source/uniform.h b/source/uniform.h deleted file mode 100644 index bc78bab8..00000000 --- a/source/uniform.h +++ /dev/null @@ -1,193 +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) { } - - void set(Type v) { value = v; } - - Type get() const { return value; } - - 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) { set(vp); } - - void set(const T *vp) - { std::copy(vp, vp+vecsize, value); } - - BaseType get(unsigned i) const { return value[i]; } - - 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 Uniform2i; -typedef UniformVector Uniform2f; -typedef UniformVector Uniform3i; -typedef UniformVector Uniform3f; -typedef UniformVector Uniform4i; -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) { set(vp); } - - void set(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); } -}; - -// The naming of these types follows the OpenGL convention of columns x rows -typedef UniformMatrix UniformMatrix2x2f; -typedef UniformMatrix UniformMatrix3x2f; -typedef UniformMatrix UniformMatrix4x2f; -typedef UniformMatrix UniformMatrix2x3f; -typedef UniformMatrix UniformMatrix3x3f; -typedef UniformMatrix UniformMatrix4x3f; -typedef UniformMatrix UniformMatrix2x4f; -typedef UniformMatrix UniformMatrix3x4f; -typedef UniformMatrix UniformMatrix4x4f; - - -template -class UniformArray: public Uniform -{ -private: - typedef typename T::BaseType BaseType; - enum { elemsize = sizeof(typename T::Type)/sizeof(typename T::BaseType) }; - - unsigned size_; - BaseType *values; - -public: - UniformArray(unsigned n, const BaseType *vp): - size_(n), - values(new BaseType[elemsize*size_]) - { - set(vp); - } - - ~UniformArray() - { - delete[] values; - } - - unsigned size() const { return size_; } - - void set(const BaseType *vp) - { std::copy(vp, vp+elemsize*size_, 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