Revert "[Tizen] Add Asynchronous loading for Model and SceneView"
authorEunki, Hong <eunkiki.hong@samsung.com>
Tue, 4 Oct 2022 09:27:44 +0000 (18:27 +0900)
committerEunki, Hong <eunkiki.hong@samsung.com>
Tue, 4 Oct 2022 09:27:44 +0000 (18:27 +0900)
This reverts commit 7b0b453dd38b28522a390a5e9181a81fb481e486.

dali-scene3d/internal/controls/model/model-impl.cpp
dali-scene3d/internal/controls/model/model-impl.h
dali-scene3d/internal/controls/scene-view/scene-view-impl.cpp
dali-scene3d/internal/controls/scene-view/scene-view-impl.h
dali-scene3d/public-api/controls/model/model.cpp
dali-scene3d/public-api/controls/model/model.h

index 2f90682..ed5d3bd 100644 (file)
@@ -25,7 +25,6 @@
 #include <dali/integration-api/debug.h>
 #include <dali/public-api/object/type-registry-helper.h>
 #include <dali/public-api/object/type-registry.h>
-#include <dali/integration-api/adaptor-framework/adaptor.h>
 #include <filesystem>
 
 // INTERNAL INCLUDES
@@ -177,8 +176,6 @@ Model::Model(const std::string& modelUrl, const std::string& resourceDirectoryUr
   mModelUrl(modelUrl),
   mResourceDirectoryUrl(resourceDirectoryUrl),
   mModelRoot(),
-  mModelLoadedCallback(nullptr),
-  mIblLoadedCallback(nullptr),
   mNaturalSize(Vector3::ZERO),
   mModelPivot(AnchorPoint::CENTER),
   mIblScaleFactor(1.0f),
@@ -189,17 +186,6 @@ Model::Model(const std::string& modelUrl, const std::string& resourceDirectoryUr
 
 Model::~Model()
 {
-  if(mModelLoadedCallback && Adaptor::IsAvailable())
-  {
-    // Removes the callback from the callback manager in case the control is destroyed before the callback is executed.
-    Adaptor::Get().RemoveIdle(mModelLoadedCallback);
-  }
-
-  if(mIblLoadedCallback && Adaptor::IsAvailable())
-  {
-    // Removes the callback from the callback manager in case the control is destroyed before the callback is executed.
-    Adaptor::Get().RemoveIdle(mIblLoadedCallback);
-  }
 }
 
 Dali::Scene3D::Model Model::New(const std::string& modelUrl, const std::string& resourceDirectoryUrl)
@@ -222,16 +208,17 @@ const Actor Model::GetModelRoot() const
 
 void Model::SetImageBasedLightSource(const std::string& diffuseUrl, const std::string& specularUrl, float scaleFactor)
 {
-  // Request asynchronous model loading
-  if(!mIblLoadedCallback)
+  mIBLResourceReady = false;
+  Texture diffuseTexture  = Dali::Scene3D::Loader::LoadCubeMap(diffuseUrl);
+  Texture specularTexture = Dali::Scene3D::Loader::LoadCubeMap(specularUrl);
+  SetImageBasedLightTexture(diffuseTexture, specularTexture, scaleFactor);
+  mIBLResourceReady = true;
+
+  // If Model resource is already ready, then set resource ready.
+  // If Model resource is still not ready, wait for model resource ready.
+  if(IsResourceReady())
   {
-    mIBLResourceReady = false;
-    mDiffuseIblUrl = diffuseUrl;
-    mSpecularIblUrl = specularUrl;
-    mIblScaleFactor = scaleFactor;
-    // The callback manager takes the ownership of the callback object.
-    mIblLoadedCallback = MakeCallback(this, &Model::OnLoadComplete);
-    Adaptor::Get().AddIdle(mIblLoadedCallback, false);
+    SetResourceReady(false);
   }
 }
 
@@ -250,6 +237,7 @@ void Model::SetImageBasedLightTexture(Dali::Texture diffuseTexture, Dali::Textur
       mIblScaleFactor = scaleFactor;
       UpdateImageBasedLightScaleFactor();
     }
+
   }
 }
 
@@ -308,14 +296,7 @@ void Model::OnSceneConnection(int depth)
 {
   if(!mModelRoot)
   {
-    // Request asynchronous model loading
-    if(!mModelLoadedCallback)
-    {
-      mModelResourceReady = false;
-      // The callback manager takes the ownership of the callback object.
-      mModelLoadedCallback = MakeCallback(this, &Model::OnLoadComplete);
-      Adaptor::Get().AddIdle(mModelLoadedCallback, false);
-    }
+    LoadModel();
   }
 
   Actor parent = Self().GetParent();
@@ -349,8 +330,7 @@ Vector3 Model::GetNaturalSize()
 {
   if(!mModelRoot)
   {
-    DALI_LOG_ERROR("Model is still not loaded.\n");
-    return Vector3::ZERO;
+    LoadModel();
   }
 
   return mNaturalSize;
@@ -507,13 +487,10 @@ void Model::LoadModel()
 
   Self().SetProperty(Dali::Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
   Self().SetProperty(Dali::Actor::Property::ANCHOR_POINT, Vector3(mModelPivot.x, 1.0f - mModelPivot.y, mModelPivot.z));
-}
 
-void Model::LoadImageBasedLight()
-{
-  Texture diffuseTexture  = Dali::Scene3D::Loader::LoadCubeMap(mDiffuseIblUrl);
-  Texture specularTexture = Dali::Scene3D::Loader::LoadCubeMap(mSpecularIblUrl);
-  SetImageBasedLightTexture(diffuseTexture, specularTexture, mIblScaleFactor);
+  mModelResourceReady = true;
+
+  Control::SetResourceReady(false);
 }
 
 void Model::ScaleModel()
@@ -610,37 +587,6 @@ void Model::UpdateImageBasedLightScaleFactor()
   }
 }
 
-void Model::OnLoadComplete()
-{
-  // TODO: In this implementation, we cannot know which request occurs this OnLoadComplete Callback.
-  // Currently it is no problem because the all loading is processed in this method.
-
-  // Prevent to emit unnecessary resource ready signal.
-  if(IsResourceReady())
-  {
-    return;
-  }
-
-  if(!mIBLResourceReady)
-  {
-    LoadImageBasedLight();
-    mIBLResourceReady = true;
-    mIblLoadedCallback = nullptr;
-  }
-
-  if(!mModelResourceReady)
-  {
-    LoadModel();
-    mModelResourceReady = true;
-    mModelLoadedCallback = nullptr;
-  }
-
-  if(IsResourceReady())
-  {
-    Control::SetResourceReady(false);
-  }
-}
-
 } // namespace Internal
 } // namespace Scene3D
 } // namespace Dali
index 6c254c9..7e97977 100644 (file)
@@ -145,11 +145,6 @@ private:
   void LoadModel();
 
   /**
-   * @brief Loads image based light from file.
-   */
-  void LoadImageBasedLight();
-
-  /**
    * @brief Scales the model to fit the control or to return to original size.
    */
   void ScaleModel();
@@ -174,11 +169,6 @@ private:
    */
   void UpdateImageBasedLightScaleFactor();
 
-  /**
-   * @brief Asynchronously loading finished.
-   */
-  void OnLoadComplete();
-
 private:
   std::string                    mModelUrl;
   std::string                    mResourceDirectoryUrl;
@@ -187,11 +177,6 @@ private:
   std::vector<WeakHandle<Actor>> mRenderableActors;
   WeakHandle<Scene3D::SceneView> mParentSceneView;
 
-  CallbackBase* mModelLoadedCallback;
-  CallbackBase* mIblLoadedCallback;
-  std::string   mDiffuseIblUrl;
-  std::string   mSpecularIblUrl;
-
   Dali::Texture mSpecularTexture;
   Dali::Texture mDiffuseTexture;
   Vector3       mNaturalSize;
index f0d08c2..08afa17 100644 (file)
@@ -29,7 +29,6 @@
 #include <dali/integration-api/debug.h>
 #include <dali/public-api/object/type-registry-helper.h>
 #include <dali/public-api/object/type-registry.h>
-#include <dali/integration-api/adaptor-framework/adaptor.h>
 
 // INTERNAL INCLUDES
 #include <dali-scene3d/internal/controls/model/model-impl.h>
@@ -61,19 +60,11 @@ Property::Index RENDERING_BUFFER = Dali::Toolkit::Control::CONTROL_PROPERTY_END_
 } // anonymous namespace
 
 SceneView::SceneView()
-: Control(ControlBehaviour(CONTROL_BEHAVIOUR_DEFAULT)),
-  mIblLoadedCallback(nullptr)
+: Control(ControlBehaviour(CONTROL_BEHAVIOUR_DEFAULT))
 {
 }
 
-SceneView::~SceneView()
-{
-  if(mIblLoadedCallback && Adaptor::IsAvailable())
-  {
-    // Removes the callback from the callback manager in case the control is destroyed before the callback is executed.
-    Adaptor::Get().RemoveIdle(mIblLoadedCallback);
-  }
-}
+SceneView::~SceneView() = default;
 
 Dali::Scene3D::SceneView SceneView::New()
 {
@@ -197,17 +188,28 @@ void SceneView::UnregisterModel(Scene3D::Model model)
 
 void SceneView::SetImageBasedLightSource(const std::string& diffuseUrl, const std::string& specularUrl, float scaleFactor)
 {
-  // Request asynchronous model loading
-  if(!mIblLoadedCallback)
+  mIBLResourceReady = false;
+  Texture diffuseTexture = Dali::Scene3D::Loader::LoadCubeMap(diffuseUrl);
+  if(diffuseTexture)
   {
-    mIBLResourceReady = false;
-    mDiffuseIblUrl = diffuseUrl;
-    mSpecularIblUrl = specularUrl;
-    mIblScaleFactor = scaleFactor;
-    // The callback manager takes the ownership of the callback object.
-    mIblLoadedCallback = MakeCallback(this, &SceneView::OnLoadComplete);
-    Adaptor::Get().AddIdle(mIblLoadedCallback, false);
+    Texture specularTexture = Dali::Scene3D::Loader::LoadCubeMap(specularUrl);
+    if(specularTexture)
+    {
+      mDiffuseTexture  = diffuseTexture;
+      mSpecularTexture = specularTexture;
+      mIblScaleFactor  = scaleFactor;
+
+      for(auto&& model : mModels)
+      {
+        if(model)
+        {
+          model.SetImageBasedLightTexture(mDiffuseTexture, mSpecularTexture, mIblScaleFactor);
+        }
+      }
+    }
   }
+  mIBLResourceReady = true;
+  Control::SetResourceReady(false);
 }
 
 void SceneView::SetImageBasedLightScaleFactor(float scaleFactor)
@@ -410,53 +412,6 @@ void SceneView::UpdateRenderTask()
   }
 }
 
-void SceneView::LoadImageBasedLight()
-{
-  Texture diffuseTexture  = Dali::Scene3D::Loader::LoadCubeMap(mDiffuseIblUrl);
-  Texture specularTexture = Dali::Scene3D::Loader::LoadCubeMap(mSpecularIblUrl);
-
-  if(diffuseTexture)
-  {
-    if(specularTexture)
-    {
-      mDiffuseTexture  = diffuseTexture;
-      mSpecularTexture = specularTexture;
-
-      for(auto&& model : mModels)
-      {
-        if(model)
-        {
-          model.SetImageBasedLightTexture(mDiffuseTexture, mSpecularTexture, mIblScaleFactor);
-        }
-      }
-    }
-  }
-}
-
-void SceneView::OnLoadComplete()
-{
-  // TODO: In this implementation, we cannot know which request occurs this OnLoadComplete Callback.
-  // Currently it is no problem because the all loading is processed in this method.
-
-  // Prevent to emit unnecessary resource ready signal.
-  if(IsResourceReady())
-  {
-    return;
-  }
-
-  if(!mIBLResourceReady)
-  {
-    LoadImageBasedLight();
-    mIBLResourceReady = true;
-    mIblLoadedCallback = nullptr;
-  }
-
-  if(IsResourceReady())
-  {
-    Control::SetResourceReady(false);
-  }
-}
-
 } // namespace Internal
 } // namespace Scene3D
 } // namespace Dali
index 4dfe593..ddd7319 100644 (file)
@@ -204,16 +204,6 @@ private:
    */
   void UpdateRenderTask();
 
-  /**
-   * @brief Loads image based light from file.
-   */
-  void LoadImageBasedLight();
-
-  /**
-   * @brief Asynchronously loading finished.
-   */
-  void OnLoadComplete();
-
 private:
   Toolkit::Visual::Base mVisual;
 
@@ -227,11 +217,8 @@ private:
   Dali::Texture               mTexture;
   Dali::RenderTask            mRenderTask;
 
-  CallbackBase* mIblLoadedCallback;
-  std::string   mDiffuseIblUrl;
-  std::string   mSpecularIblUrl;
+  Layer mRootLayer;
 
-  Layer         mRootLayer;
   Dali::Texture mSpecularTexture;
   Dali::Texture mDiffuseTexture;
   float         mIblScaleFactor{1.0f};
index 6b0c4bf..e315cb9 100644 (file)
@@ -25,7 +25,9 @@ namespace Dali
 {
 namespace Scene3D
 {
-Model::Model() = default;
+Model::Model()
+{
+}
 
 Model::Model(const Model& model) = default;
 
@@ -35,7 +37,9 @@ Model& Model::operator=(const Model& model) = default;
 
 Model& Model::operator=(Model&& rhs) = default;
 
-Model::~Model() = default;
+Model::~Model()
+{
+}
 
 Model Model::New(const std::string& modelUrl, const std::string& resourceDirectoryUrl)
 {
index a71a77c..6678d9f 100644 (file)
@@ -146,7 +146,6 @@ public:
 
   /**
    * @brief Sets Image Based Light Texture.
-   * @note This method doesn't load texture from file, so this work is performed synchronously.
    *
    * @param[in] diffuseTexture cube map texture that can be used as a diffuse IBL source.
    * @param[in] specularTexture cube map texture that can be used as a specular IBL source.