OSG  3.4.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
UpdateUniform.h
Go to the documentation of this file.
1 #ifndef OSGANIMATION_UPDATE_UNIFORM
2 #define OSGANIMATION_UPDATE_UNIFORM 1
3 
4 #include <osgAnimation/AnimationUpdateCallback>
5 #include <osgAnimation/Export>
6 #include <osg/NodeVisitor>
7 #include <osg/Uniform>
8 
9 namespace osgAnimation
10 {
11  template <typename T>
12  class UpdateUniform : public AnimationUpdateCallback<osg::UniformCallback>
13  {
14  protected:
16 
17  public:
18  UpdateUniform(const std::string& aName = "")
20  {
21  _uniformTarget = new TemplateTarget<T>(); // NOTE: initial value is undefined
22  }
23 
24  UpdateUniform(const UpdateUniform& updateuniform,
25  const osg::CopyOp& copyop) :
26  AnimationUpdateCallback<osg::UniformCallback>(updateuniform, copyop)
27  {
28  _uniformTarget = new TemplateTarget<T>(*(updateuniform._uniformTarget));
29  }
30 
32 
34  virtual void operator () (osg::Uniform* uniform, osg::NodeVisitor* nv)
35  {
37  update(*uniform);
38 
39  traverse(uniform, nv);
40  }
41 
42  bool link(Channel* channel)
43  {
44  if (channel->getName().find("uniform") != std::string::npos)
45  return channel->setTarget(_uniformTarget.get());
46  else
47  OSG_WARN << "Channel " << channel->getName() << " does not contain a valid symbolic name for this class " << className() << std::endl;
48 
49  return false;
50  }
51 
52  void update(osg::Uniform& uniform)
53  {
54  T value = _uniformTarget->getValue();
55  uniform.set(value);
56  }
57 
58  };
59 
60  // float
61  struct UpdateFloatUniform : public UpdateUniform<float>
62  {
63  UpdateFloatUniform(const std::string& aName = "") : UpdateUniform<float>(aName) { }
65  const osg::CopyOp& copyop) :
66  osg::Object(ufu, copyop), // copy name
67  UpdateUniform<float>(ufu, copyop) { }
68 
70  };
71 
72  // Vec3f
73  struct UpdateVec3fUniform : public UpdateUniform<osg::Vec3f>
74  {
75  UpdateVec3fUniform(const std::string& aName = "") : UpdateUniform<osg::Vec3f>(aName) { }
77  const osg::CopyOp& copyop) :
78  osg::Object(uv3fu, copyop), // copy name
79  UpdateUniform<osg::Vec3f>(uv3fu, copyop) { }
80 
82  };
83 
84  // Matrixf
85  struct UpdateMatrixfUniform : public UpdateUniform<osg::Matrixf>
86  {
87  UpdateMatrixfUniform(const std::string& aName = "") : UpdateUniform<osg::Matrixf>(aName) { }
89  const osg::CopyOp& copyop) :
90  osg::Object(umfu, copyop), // copy name
91  UpdateUniform<osg::Matrixf>(umfu, copyop) { }
92 
94  };
95 }
96 
97 #endif
UpdateUniform(const UpdateUniform &updateuniform, const osg::CopyOp &copyop)
Definition: UpdateUniform.h:24
UpdateMatrixfUniform(const std::string &aName="")
Definition: UpdateUniform.h:87
META_Object(osgAnimation, UpdateUniform< T >)
virtual bool setTarget(Target *)=0
#define OSG_WARN
Definition: Notify.h:85
UpdateVec3fUniform(const std::string &aName="")
Definition: UpdateUniform.h:75
UpdateMatrixfUniform(const UpdateMatrixfUniform &umfu, const osg::CopyOp &copyop)
Definition: UpdateUniform.h:88
bool traverse(osg::Object *object, osg::Object *data)
VisitorType getVisitorType() const
Definition: NodeVisitor.h:121
UpdateVec3fUniform(const UpdateVec3fUniform &uv3fu, const osg::CopyOp &copyop)
Definition: UpdateUniform.h:76
Object()
Definition: Object.h:65
virtual void operator()(osg::Uniform *uniform, osg::NodeVisitor *nv)
Definition: UpdateUniform.h:34
META_Object(osgAnimation, UpdateFloatUniform)
T * get() const
Definition: ref_ptr.h:92
virtual const char * className() const =0
void update(osg::Uniform &uniform)
Definition: UpdateUniform.h:52
bool link(Channel *channel)
Definition: UpdateUniform.h:42
Definition: AlphaFunc.h:19
UpdateFloatUniform(const UpdateFloatUniform &ufu, const osg::CopyOp &copyop)
Definition: UpdateUniform.h:64
bool set(float f)
UpdateFloatUniform(const std::string &aName="")
Definition: UpdateUniform.h:63
osg::ref_ptr< TemplateTarget< T > > _uniformTarget
Definition: UpdateUniform.h:15
META_Object(osgAnimation, UpdateVec3fUniform)
UpdateUniform(const std::string &aName="")
Definition: UpdateUniform.h:18
META_Object(osgAnimation, UpdateMatrixfUniform)
const std::string & getName() const