Add a node resetter that resets the animatable properties for two frames after node...
[platform/core/uifw/dali-core.git] / dali / internal / update / manager / update-manager.h
index 29d0e0f..da66ea4 100644 (file)
@@ -31,8 +31,9 @@
 #include <dali/internal/event/rendering/texture-impl.h>
 #include <dali/internal/render/renderers/render-texture.h> // For OwnerPointer<Render::Texture>
 #include <dali/internal/render/renderers/render-vertex-buffer.h>
-#include <dali/internal/render/shaders/scene-graph-shader.h> // for OwnerPointer< Shader >
+#include <dali/internal/render/shaders/render-shader.h> // for OwnerPointer< Shader >
 #include <dali/internal/update/animation/scene-graph-animation.h>
+#include <dali/internal/update/common/node-resetter.h>
 #include <dali/internal/update/common/property-resetter.h>
 #include <dali/internal/update/common/scene-graph-buffers.h>
 #include <dali/internal/update/common/scene-graph-property-notification.h>
@@ -52,7 +53,6 @@ class FrameCallbackInterface;
 
 namespace Integration
 {
-class GlSyncAbstraction;
 class RenderController;
 
 } // namespace Integration
@@ -260,6 +260,13 @@ public:
    */
   void AddPropertyResetter(OwnerPointer<PropertyResetterBase>& propertyResetter);
 
+  /**
+   * Add a node resetter. UpdateManager takes ownership of the object.
+   * It will be killed by UpdateManager when the node is disconnected from the scene graph;
+   * or when the node is destroyed.
+   */
+  void AddNodeResetter(OwnerPointer<NodeResetter>& nodeResetter);
+
   // Property Notification
 
   /**
@@ -333,6 +340,12 @@ public:
    */
   void RemoveRenderer(Renderer* renderer);
 
+  /**
+   * Attach a renderer to node
+   * @param renderer to attach
+   */
+  void AttachRenderer(Node* node, Renderer* renderer);
+
   // Gestures
 
   /**
@@ -1099,6 +1112,16 @@ inline void RemoveRendererMessage(UpdateManager& manager, const Renderer& object
   new(slot) LocalType(&manager, &UpdateManager::RemoveRenderer, const_cast<Renderer*>(&object));
 }
 
+inline void AttachRendererMessage(UpdateManager& manager, const Node& node, const Renderer& renderer)
+{
+  using LocalType = MessageValue2<UpdateManager, Node*, Renderer*>;
+
+  // Reserve some memory inside the message queue
+  uint32_t* slot = manager.ReserveMessageSlot(sizeof(LocalType));
+  // Construct message in the message queue memory; note that delete should not be called on the return value
+  new(slot) LocalType(&manager, &UpdateManager::AttachRenderer, const_cast<Node*>(&node), const_cast<Renderer*>(&renderer));
+}
+
 // The render thread can safely change the Shader
 inline void AddTextureSetMessage(UpdateManager& manager, OwnerPointer<TextureSet>& textureSet)
 {