00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035 #ifndef VRS_GL2_UNIFORMVARIABLE_H
00036 #define VRS_GL2_UNIFORMVARIABLE_H
00037
00038 #include <vrs/opengl/gl2/programvariable.h>
00039
00040 namespace VRS {
00041 namespace GL2 {
00042
00043 class VRS_CORE_API UniformVariableBase : public ProgramVariable {
00044
00045 public:
00046 VRS_TYPEINFO(UniformVariableBase, ProgramVariable);
00047 };
00048
00049
00053 template<typename T>
00054 class UniformVariable : public UniformVariableBase {
00055 public:
00056 UniformVariable(const std::string& name, const T& value) :
00057 UniformVariableBase(),
00058 name_(name),
00059 value_(value)
00060 { }
00066 bool operator==(const UniformVariable<T>& other) const
00067 {
00068 return (this==&other) || ((value_==other.value_) && (name_==other.name_));
00069 }
00070
00071 virtual std::string name() const { return name_; }
00073
00074 virtual const T& getValue() const { return value_; }
00075 virtual void setValue(const T& newValue) { value_ = newValue; modified(); }
00077
00078 VRS_TYPEINFO(UniformVariable, UniformVariableBase);
00079 VRS_SERIALIZABLE(UniformVariable);
00080
00081 protected:
00082 UniformVariable() { }
00083
00084 private:
00085 std::string name_;
00086 T value_;
00087 };
00088
00089 template<typename T>
00090 inline void UniformVariable<T>::serialize(SerializationManager& manager) {
00091 UINT8 version = 0;
00092 manager.classVersion(version);
00093
00094 VRS_SERIALIZATION_PARENT_CLASS(manager, UniformVariableBase);
00095 serialization(manager, "name", name_);
00096 serialization(manager, "value", value_);
00097 }
00098
00099 VRS_SERIALIZATION_REGISTRATION_TEMPLATE(UniformVariable);
00100
00101 }
00102 }
00103
00104 #endif // VRS_GL2_UNIFORMVARIABLE_H