Revert "[Tizen] Ensure release some Texture/Geometry handles after adaptor stop"
authorJiyun Yang <ji.yang@samsung.com>
Wed, 21 Aug 2024 04:22:23 +0000 (13:22 +0900)
committerJiyun Yang <ji.yang@samsung.com>
Wed, 21 Aug 2024 04:22:23 +0000 (13:22 +0900)
This reverts commit 56bc8c8231f92c7700465c0095cec0f5ec89e46a.

dali-scene3d/internal/common/image-resource-loader.cpp
dali-scene3d/internal/common/image-resource-loader.h
dali-scene3d/internal/model-components/model-primitive-impl.cpp
dali-scene3d/public-api/loader/environment-definition.cpp
dali-scene3d/public-api/loader/environment-definition.h
dali-scene3d/public-api/loader/node-definition.cpp
dali-scene3d/public-api/loader/node-definition.h
dali-toolkit/devel-api/asset-manager/asset-manager.h
dali-toolkit/devel-api/file.list

index 7b2f45fa040b7adaeac1e686333bd47eac97b855..98acb95f635bcfc58983fb8c58c0441f1cbe2611 100644 (file)
@@ -19,8 +19,6 @@
 #include <dali-scene3d/internal/common/image-resource-loader.h>
 
 // EXTERNAL INCLUDES
-#include <dali-toolkit/devel-api/asset-manager/asset-manager.h>
-#include <dali/devel-api/adaptor-framework/environment-variable.h>
 #include <dali/devel-api/adaptor-framework/image-loading.h>
 #include <dali/devel-api/adaptor-framework/lifecycle-controller.h>
 #include <dali/devel-api/adaptor-framework/pixel-buffer.h>
@@ -50,8 +48,6 @@ namespace
 constexpr uint32_t MAXIMUM_COLLECTING_ITEM_COUNTS_PER_GC_CALL = 5u;
 constexpr uint32_t GC_PERIOD_MILLISECONDS                     = 1000u;
 
-constexpr std::string_view PRE_COMPUTED_BRDF_TEXTURE_FILE_NAME = "brdfLUT.png";
-
 #ifdef DEBUG_ENABLED
 Debug::Filter* gLogFilter = Debug::Filter::New(Debug::NoLogging, false, "LOG_IMAGE_RESOURCE_LOADER");
 #endif
@@ -520,11 +516,8 @@ private:
 };
 
 static std::shared_ptr<CacheImpl> gCacheImpl{nullptr};
-
-// Static singletone instance what we usually used.
-static Dali::Texture gEmptyTextureWhiteRGB{};
-static Dali::Texture gEmptyCubeTextureWhiteRGB{};
-static Dali::Texture gDefaultBrdfTexture{};
+static Dali::Texture              gEmptyTextureWhiteRGB{};
+static Dali::Texture              gEmptyCubeTextureWhiteRGB{};
 
 std::shared_ptr<CacheImpl> GetCacheImpl()
 {
@@ -542,7 +535,6 @@ void DestroyCacheImpl()
   // Remove texture object when application stopped.
   gEmptyTextureWhiteRGB.Reset();
   gEmptyCubeTextureWhiteRGB.Reset();
-  gDefaultBrdfTexture.Reset();
 }
 
 } // namespace
@@ -554,7 +546,7 @@ namespace ImageResourceLoader
 // Called by main thread..
 Dali::Texture GetEmptyTextureWhiteRGB()
 {
-  if(DALI_UNLIKELY(!gEmptyTextureWhiteRGB))
+  if(!gEmptyTextureWhiteRGB)
   {
     Dali::PixelData emptyPixelData = GetEmptyPixelDataWhiteRGB();
     gEmptyTextureWhiteRGB          = Texture::New(TextureType::TEXTURE_2D, emptyPixelData.GetPixelFormat(), emptyPixelData.GetWidth(), emptyPixelData.GetHeight());
@@ -565,7 +557,7 @@ Dali::Texture GetEmptyTextureWhiteRGB()
 
 Dali::Texture GetEmptyCubeTextureWhiteRGB()
 {
-  if(DALI_UNLIKELY(!gEmptyCubeTextureWhiteRGB))
+  if(!gEmptyCubeTextureWhiteRGB)
   {
     Dali::PixelData emptyPixelData = GetEmptyPixelDataWhiteRGB();
     gEmptyCubeTextureWhiteRGB      = Texture::New(TextureType::TEXTURE_CUBE, emptyPixelData.GetPixelFormat(), emptyPixelData.GetWidth(), emptyPixelData.GetHeight());
@@ -577,17 +569,6 @@ Dali::Texture GetEmptyCubeTextureWhiteRGB()
   return gEmptyCubeTextureWhiteRGB;
 }
 
-Dali::Texture GetDefaultBrdfTexture()
-{
-  if(DALI_UNLIKELY(!gDefaultBrdfTexture))
-  {
-    Dali::PixelData brdfPixelData = GetDefaultBrdfPixelData();
-    gDefaultBrdfTexture           = Texture::New(TextureType::TEXTURE_2D, brdfPixelData.GetPixelFormat(), brdfPixelData.GetWidth(), brdfPixelData.GetHeight());
-    gDefaultBrdfTexture.Upload(brdfPixelData, 0, 0, 0, 0, brdfPixelData.GetWidth(), brdfPixelData.GetHeight());
-  }
-  return gDefaultBrdfTexture;
-}
-
 Dali::Texture GetCachedTexture(Dali::PixelData pixelData, bool mipmapRequired)
 {
   if(Dali::Adaptor::IsAvailable() && SupportPixelDataCache(pixelData))
@@ -641,26 +622,6 @@ Dali::PixelData GetEmptyPixelDataZAxisAndAlphaRGBA()
   return emptyPixelData;
 }
 
-Dali::PixelData GetDefaultBrdfPixelData()
-{
-  static Dali::Mutex sPixelDataMutex;
-  {
-    Dali::Mutex::ScopedLock lock(sPixelDataMutex);
-
-    static Dali::PixelData defaultBrdfPixelData;
-
-    if(DALI_UNLIKELY(!defaultBrdfPixelData))
-    {
-      Devel::PixelBuffer pixelBuffer = Dali::LoadImageFromFile(Dali::Toolkit::AssetManager::GetDaliImagePath() + std::string(PRE_COMPUTED_BRDF_TEXTURE_FILE_NAME));
-      if(pixelBuffer)
-      {
-        defaultBrdfPixelData = Devel::PixelBuffer::Convert(pixelBuffer);
-      }
-    }
-    return defaultBrdfPixelData;
-  }
-}
-
 Dali::PixelData GetCachedPixelData(const std::string& url)
 {
   return GetCachedPixelData(url, ImageDimensions(), FittingMode::DEFAULT, SamplingMode::BOX_THEN_LINEAR, true);
index b498b30d4052dd89dcca7dc97e42ebbcae46569e..3957009344081eb45c40073e46cfa1c3f1fb971d 100644 (file)
@@ -53,12 +53,6 @@ Dali::Texture GetEmptyTextureWhiteRGB();
  */
 Dali::Texture GetEmptyCubeTextureWhiteRGB();
 
-/**
- * @brief Get default BRDF texture.
- * @return A Texture object containing the default BRDF texture.
- */
-Dali::Texture GetDefaultBrdfTexture();
-
 /**
  * @brief Get cached texture handle, or create new texture and upload.
  * @param[in] pixelData The PixelData of image to upload
@@ -104,12 +98,6 @@ Dali::PixelData GetEmptyPixelDataZAxisRGB();
  */
 Dali::PixelData GetEmptyPixelDataZAxisAndAlphaRGBA();
 
-/**
- * @brief Get cached pixelData handle with brdf pixel data has.
- * @return A PixelData object containing brdf data.
- */
-Dali::PixelData GetDefaultBrdfPixelData();
-
 /**
  * @brief Get cached image, or loads an image synchronously.
  * @note If cache handler is not created yet, or destroyed due to app terminated, it will load image synchronously without cache.
index 80f215ef65fa9bf53adad429b655304069f4d8f0..844f0b9ad0df9049380cbdd0a43bf0b9caad51c4 100644 (file)
@@ -417,7 +417,7 @@ void ModelPrimitive::ApplyMaterialToRenderer(MaterialModifyObserver::ModifyFlag
     }
     mTextureSet.SetTexture(textureCount++, mShadowMapTexture);
 
-    Texture brdfTexture = Dali::Scene3D::Internal::ImageResourceLoader::GetDefaultBrdfTexture();
+    Texture brdfTexture = Scene3D::Loader::EnvironmentDefinition::GetBrdfTexture();
     if(!mSpecularTexture || !mDiffuseTexture)
     {
       Texture iblTexture = Dali::Scene3D::Internal::ImageResourceLoader::GetEmptyCubeTextureWhiteRGB();
index 65a327151dd7f2ac840833bb29c30f16c6611d4f..9c74f23f02df949c60f348c9eea3f2d3f5d3989a 100644 (file)
 
 namespace
 {
-static constexpr float DEFAULT_INTENSITY = 1.0f;
-
-/**
- * @brief Request to load default brdf pixel data at worker thread.
- */
-static void RequestLoadBrdfPixelData()
+#define TOKEN_STRING(x) #x
+std::string GetDaliImagePath()
 {
-  /// GetDefaultBrdfPixelData() will load the brdf pixel data if we don't load it before.
-  [[maybe_unused]] auto ret = Dali::Scene3D::Internal::ImageResourceLoader::GetDefaultBrdfPixelData();
+  return (nullptr == DALI_IMAGE_DIR) ? Dali::EnvironmentVariable::GetEnvironmentVariable(TOKEN_STRING(DALI_IMAGE_DIR)) : DALI_IMAGE_DIR;
 }
 
+static constexpr float DEFAULT_INTENSITY = 1.0f;
+
 } // unnamed namespace
 
 namespace Dali::Scene3D::Loader
 {
+namespace
+{
+const char* PRE_COMPUTED_BRDF_TEXTURE_FILE_NAME = "brdfLUT.png";
+}
+PixelData EnvironmentDefinition::mBrdfPixelData;
+Texture   EnvironmentDefinition::mBrdfTexture;
+bool      EnvironmentDefinition::mIsBrdfLoaded = false;
+
+Dali::Texture EnvironmentDefinition::GetBrdfTexture()
+{
+  if(!mBrdfTexture)
+  {
+    if(!mIsBrdfLoaded)
+    {
+      LoadBrdfTexture();
+    }
+    mBrdfTexture = Texture::New(TextureType::TEXTURE_2D, mBrdfPixelData.GetPixelFormat(), mBrdfPixelData.GetWidth(), mBrdfPixelData.GetHeight());
+    mBrdfTexture.Upload(mBrdfPixelData);
+  }
+  return mBrdfTexture;
+}
+
 EnvironmentDefinition::RawData
 EnvironmentDefinition::LoadRaw(const std::string& environmentsPath)
 {
@@ -70,7 +89,7 @@ EnvironmentDefinition::LoadRaw(const std::string& environmentsPath)
 
   if(mUseBrdfTexture)
   {
-    RequestLoadBrdfPixelData();
+    LoadBrdfTexture();
   }
   return raw;
 }
@@ -94,7 +113,7 @@ EnvironmentDefinition::Textures EnvironmentDefinition::Load(RawData&& raw)
 
   if(mUseBrdfTexture)
   {
-    textures.mBrdf = Dali::Scene3D::Internal::ImageResourceLoader::GetDefaultBrdfTexture();
+    textures.mBrdf = GetBrdfTexture();
   }
   return textures;
 }
@@ -104,4 +123,21 @@ float EnvironmentDefinition::GetDefaultIntensity()
   return DEFAULT_INTENSITY;
 }
 
+void EnvironmentDefinition::LoadBrdfTexture()
+{
+  static Dali::Mutex mutex;
+  {
+    Mutex::ScopedLock lock(mutex);
+    if(!mIsBrdfLoaded)
+    {
+      Devel::PixelBuffer pixelBuffer = LoadImageFromFile(GetDaliImagePath() + PRE_COMPUTED_BRDF_TEXTURE_FILE_NAME);
+      if(pixelBuffer)
+      {
+        mBrdfPixelData = Devel::PixelBuffer::Convert(pixelBuffer);
+        mIsBrdfLoaded  = true;
+      }
+    }
+  }
+}
+
 } // namespace Dali::Scene3D::Loader
\ No newline at end of file
index 99931d7ab790c4404aea4d20c54bf66eb834046a..39aa53ac9361f47ccdacbefa7b29a04f92180e46 100644 (file)
@@ -1,7 +1,7 @@
 #ifndef DALI_SCENE3D_LOADER_ENVIRONMENT_DEFINITION_H
 #define DALI_SCENE3D_LOADER_ENVIRONMENT_DEFINITION_H
 /*
- * Copyright (c) 2024 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2023 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -65,6 +65,8 @@ struct DALI_SCENE3D_API EnvironmentDefinition
   EnvironmentDefinition(EnvironmentDefinition&&) = default;
   EnvironmentDefinition& operator=(EnvironmentDefinition&&) = default;
 
+  static Dali::Texture GetBrdfTexture();
+
   /**
    * @brief Loads raw pixel data for the given diffuse and specular maps.
    * @SINCE_2_0.7
@@ -88,6 +90,11 @@ struct DALI_SCENE3D_API EnvironmentDefinition
    */
   static float GetDefaultIntensity();
 
+private:
+  /// @cond internal
+  static void LoadBrdfTexture();
+  /// @endcond internal
+
 public: // DATA
   std::string              mDiffuseMapPath;
   std::string              mSpecularMapPath;
@@ -96,6 +103,11 @@ public: // DATA
   Vector3                  mYDirection      = Vector3::ONE;
   float                    mIblIntensity    = 1.0f;
   bool                     mUseBrdfTexture  = false;
+
+private:
+  static PixelData mBrdfPixelData;
+  static Texture   mBrdfTexture;
+  static bool      mIsBrdfLoaded;
 };
 
 } // namespace Dali::Scene3D::Loader
index 48a222ab12aa6927ef2936248c747cffa95116e8..013b4f3621f58fdd63a9247f88be3424d8de6eb4 100644 (file)
@@ -114,19 +114,13 @@ void NodeDefinition::Renderable::ReflectResources(IResourceReflector& reflector)
 }
 
 void NodeDefinition::Renderable::OnCreate(const NodeDefinition& nodeDefinition, CreateParams& params, ModelNode& node) const
-{
-  // TODO : Need to keep this default geometry only 1 times per each adaptor.
-  Geometry defaultGeometry = Geometry::New();
-  CreateRenderer(nodeDefinition, params, defaultGeometry, node);
-}
-
-void NodeDefinition::Renderable::CreateRenderer(const NodeDefinition& nodeDefinition, CreateParams& params, Geometry& geometry, ModelNode& node) const
 {
   DALI_ASSERT_DEBUG(mShaderIdx != INVALID_INDEX);
   auto&  resources = params.mResources;
   Shader shader    = resources.mShaders[mShaderIdx].second;
 
-  Renderer renderer = Renderer::New(geometry, shader);
+  static Geometry defaultGeometry = Geometry::New();
+  Renderer        renderer        = Renderer::New(defaultGeometry, shader);
 
   RendererState::Apply(resources.mShaders[mShaderIdx].first.mRendererState, renderer);
 
@@ -263,12 +257,7 @@ void ModelRenderable::ReflectResources(IResourceReflector& reflector)
 void ModelRenderable::OnCreate(const NodeDefinition& nodeDefinition, NodeDefinition::CreateParams& params, ModelNode& node) const
 {
   DALI_ASSERT_DEBUG(mMeshIdx != INVALID_INDEX);
-
-  auto& resources = params.mResources;
-  auto& mesh      = resources.mMeshes[mMeshIdx];
-
   ShaderOption::HashType shaderOptionHash{0u};
-  Renderer               renderer;
   if(mShaderIdx == INVALID_INDEX)
   {
     ShaderOption option = params.mShaderManager->ProduceShaderOption(params.mResources.mMaterials[mMaterialIdx].first,
@@ -276,7 +265,8 @@ void ModelRenderable::OnCreate(const NodeDefinition& nodeDefinition, NodeDefinit
     shaderOptionHash    = option.GetOptionHash();
     Shader shader       = params.mShaderManager->ProduceShader(option);
 
-    renderer = Renderer::New(mesh.second.geometry, shader);
+    static Geometry defaultGeometry = Geometry::New();
+    Renderer        renderer        = Renderer::New(defaultGeometry, shader);
 
     RendererState::Apply(params.mShaderManager->GetRendererState(params.mResources.mMaterials[mMaterialIdx].first), renderer);
     Internal::GetImplementation(node).UpdateShader(params.mShaderManager);
@@ -284,11 +274,16 @@ void ModelRenderable::OnCreate(const NodeDefinition& nodeDefinition, NodeDefinit
   }
   else
   {
-    Renderable::CreateRenderer(nodeDefinition, params, mesh.second.geometry, node);
-    DALI_ASSERT_ALWAYS(node.GetRendererCount() > 0u && "CreateRenderer failed!");
-    renderer = node.GetRendererAt(node.GetRendererCount() - 1u);
+    Renderable::OnCreate(nodeDefinition, params, node);
   }
 
+  auto& resources = params.mResources;
+  auto& mesh      = resources.mMeshes[mMeshIdx];
+
+  auto     renderer = node.GetRendererAt(node.GetRendererCount() - 1u);
+  Geometry geometry = mesh.second.geometry;
+  renderer.SetGeometry(geometry);
+
   TextureSet textures = resources.mMaterials[mMaterialIdx].second;
   // Set the blend shape texture.
   if(mesh.second.blendShapeGeometry)
index 729ca6e57df68c34af8af7295564796045474486..c1cea0984f4efeb3428005a7ed97c91cec97e969 100644 (file)
@@ -1,7 +1,7 @@
 #ifndef DALI_SCENE3D_LOADER_NODE_DEFINITION_H_
 #define DALI_SCENE3D_LOADER_NODE_DEFINITION_H_
 /*
- * Copyright (c) 2024 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2023 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -180,9 +180,6 @@ public: // TYPES
     virtual void RegisterResources(IResourceReceiver& receiver) const;
     virtual void ReflectResources(IResourceReflector& reflector);
     virtual void OnCreate(const NodeDefinition& nodeDefinition, CreateParams& params, ModelNode& node) const;
-
-  protected:
-    void CreateRenderer(const NodeDefinition& nodeDefinition, CreateParams& params, Geometry& geometry, ModelNode& node) const;
   };
 
   struct CustomizationDefinition
index 683e07022ef75da1c38ce10ed74d8785d179ed37..ecc56de6f5b1652b8da06434f3e4e9bcde5dc3d2 100644 (file)
@@ -2,7 +2,7 @@
 #define DALI_TOOLKIT_ASSET_MANAGER_DEVEL_H
 
 /*
- * Copyright (c) 2024 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2020 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,7 +19,6 @@
  */
 
 // EXTERNAL INCLUDES
-#include <dali-toolkit/public-api/dali-toolkit-common.h>
 #include <string>
 
 // INTERNAL INCLUDES
@@ -31,7 +30,7 @@ namespace Toolkit
 /**
  * @brief Retrieves the file system path of the assets.
  */
-class DALI_TOOLKIT_API AssetManager
+class AssetManager
 {
 public:
   /**
index f8a9d42a31fbd022c41b90d3d1d057c6bce4d5d6..43d805bf202b0d8e3a2079f3ba5c666b6bc3c60b 100755 (executable)
@@ -100,11 +100,6 @@ SET( devel_api_accessibility-manager_header_files
   ${devel_api_src_dir}/accessibility-manager/accessibility-manager.h
 )
 
-SET( devel_api_asset-manager_header_files
-  ${devel_api_src_dir}/asset-manager/asset-manager.h
-)
-
-
 SET( devel_api_controls_header_files
   ${devel_api_src_dir}/controls/canvas-view/canvas-view.h
   ${devel_api_src_dir}/controls/control-accessible.h
@@ -316,7 +311,6 @@ SET( SOURCES ${SOURCES}
 SET( DEVEL_API_HEADERS ${DEVEL_API_HEADERS}
   ${devel_api_header_files}
   ${devel_api_accessibility-manager_header_files}
-  ${devel_api_asset-manager_header_files}
   ${devel_api_alignment_header_files}
   ${devel_api_controls_header_files}
   ${devel_api_bloom_view_header_files}