Add ResourceReady for Control
[platform/core/uifw/dali-toolkit.git] / dali-scene3d / internal / controls / model-view / model-view-impl.h
index 14b31f9..2ec360f 100644 (file)
 #include <dali/public-api/actors/layer.h>
 #include <dali/public-api/animation/animation.h>
 #include <dali/public-api/rendering/texture.h>
+#include <dali/public-api/object/weak-handle.h>
 
 // INTERNAL INCLUDES
 #include <dali-scene3d/public-api/controls/model-view/model-view.h>
+#include <dali-scene3d/public-api/controls/scene-view/scene-view.h>
 
 namespace Dali
 {
@@ -71,6 +73,11 @@ public:
   void SetImageBasedLightSource(const std::string& diffuse, const std::string& specular, float scaleFactor);
 
   /**
+   * @copydoc ModelView::SetImageBasedLightTexture()
+   */
+  void SetImageBasedLightTexture(Dali::Texture diffuse, Dali::Texture specular, float scaleFactor);
+
+  /**
    * @copydoc ModelView::GetAnimationCount()
    */
   uint32_t GetAnimationCount();
@@ -103,9 +110,9 @@ private:
   void OnSceneConnection(int depth) override;
 
   /**
-   * @copydoc Toolkit::Control::OnInitialize()
+   * @copydoc CustomActorImpl::OnSceneDisconnection()
    */
-  void OnInitialize() override;
+  void OnSceneDisconnection() override;
 
   /**
    * @copydoc Toolkit::Control::GetNaturalSize
@@ -128,6 +135,11 @@ private:
   void OnRelayout(const Vector2& size, RelayoutContainer& container) override;
 
   /**
+   * @copydoc Toolkit::Control::IsResourceReady()
+   */
+  bool IsResourceReady() const override;
+
+  /**
    * @brief Loads a model from file
    */
   void LoadModel();
@@ -145,14 +157,20 @@ private:
   /**
    * @brief Changes IBL information of the input node.
    */
-  void SetImageBasedLight(Actor node);
+  void CollectRenderableActor(Actor actor);
+
+  /**
+   * @brief Changes IBL information of the input node.
+   */
+  void UpdateImageBasedLight();
 
 private:
-  std::string                mModelPath;
-  std::string                mResourcePath;
-  Dali::Layer                mModelLayer;
-  Dali::Actor                mModelRoot;
-  std::vector<AnimationData> mAnimations;
+  std::string                    mModelPath;
+  std::string                    mResourcePath;
+  Dali::Actor                    mModelRoot;
+  std::vector<AnimationData>     mAnimations;
+  std::vector<WeakHandle<Actor>> mRenderableActors;
+  WeakHandle<Scene3D::SceneView> mParentSceneView;
 
   Dali::Texture mSpecularTexture;
   Dali::Texture mDiffuseTexture;
@@ -161,6 +179,8 @@ private:
   float         mIblScaleFactor;
   bool          mFitSize;
   bool          mFitCenter;
+  bool          mModelResourceReady;
+  bool          mIBLResourceReady;
 };
 
 } // namespace Internal