Merge "Remove mask internally in texture manager" into devel/master
authorsunghyun kim <scholb.kim@samsung.com>
Thu, 8 Sep 2022 04:45:58 +0000 (04:45 +0000)
committerGerrit Code Review <gerrit@review>
Thu, 8 Sep 2022 04:45:58 +0000 (04:45 +0000)
1  2 
automated-tests/src/dali-toolkit-internal/utc-Dali-TextureManager.cpp
dali-toolkit/internal/texture-manager/texture-cache-manager.cpp
dali-toolkit/internal/texture-manager/texture-cache-manager.h
dali-toolkit/internal/texture-manager/texture-manager-impl.cpp
dali-toolkit/internal/texture-manager/texture-manager-impl.h
dali-toolkit/internal/visuals/animated-image/fixed-image-cache.cpp
dali-toolkit/internal/visuals/animated-image/rolling-animated-image-cache.cpp
dali-toolkit/internal/visuals/animated-image/rolling-image-cache.cpp
dali-toolkit/internal/visuals/image/image-visual.cpp

@@@ -1308,47 -1367,26 +1360,63 @@@ TextureSet TextureManager::GetTextureSe
    }
    else
    {
 -    observer->LoadComplete(success, TextureUploadObserver::TextureInformation(TextureUploadObserver::ReturnType::TEXTURE, textureInfo.textureId, textureInfo.textureSet, (textureInfo.useAtlas == UseAtlas::USE_ATLAS) ? true : false, textureInfo.atlasRect, textureInfo.preMultiplied));
 +    DALI_LOG_ERROR("GetTextureSet is failed. texture is not uploaded \n");
 +  }
 +  return textureSet;
 +}
 +
 +TextureSet TextureManager::GetTextureSet(const TextureManager::TextureInfo& textureInfo)
 +{
 +  TextureSet textureSet;
 +
 +  // LoadComplete has already been called - keep the same texture set
 +  textureSet = TextureSet::New();
 +  if(!textureInfo.textures.empty())
 +  {
 +    if(textureInfo.textures.size() > 1) // For YUV case
 +    {
 +      uint32_t index = 0u;
 +      for(auto&& texture : textureInfo.textures)
 +      {
 +        textureSet.SetTexture(index++, texture);
 +      }
 +    }
 +    else
 +    {
 +      textureSet.SetTexture(TEXTURE_INDEX, textureInfo.textures[0]);
 +      TextureCacheIndex maskCacheIndex = mTextureCacheManager.GetCacheIndexFromId(textureInfo.maskTextureId);
 +      if(maskCacheIndex != INVALID_CACHE_INDEX)
 +      {
 +        TextureInfo& maskTextureInfo(mTextureCacheManager[maskCacheIndex]);
 +        if(maskTextureInfo.storageType == StorageType::UPLOAD_TO_TEXTURE || maskTextureInfo.storageType == StorageType::KEEP_TEXTURE)
 +        {
 +          if(!maskTextureInfo.textures.empty())
 +          {
 +            textureSet.SetTexture(MASK_TEXTURE_INDEX, maskTextureInfo.textures[0]);
 +          }
 +        }
 +      }
 +    }
    }
 +  return textureSet;
  }
  
+ void TextureManager::RemoveTextureObserver(TextureManager::TextureInfo& textureInfo, TextureUploadObserver* observer)
+ {
+   // Remove its observer
+   if(observer)
+   {
+     const auto   iterEnd = textureInfo.observerList.End();
+     const auto   iter    = std::find(textureInfo.observerList.Begin(), iterEnd, observer);
+     if(iter != iterEnd)
+     {
+       // Disconnect and remove the observer.
+       observer->DestructionSignal().Disconnect(this, &TextureManager::ObserverDestroyed);
+       textureInfo.observerList.Erase(iter);
+     }
+   }
+ }
  } // namespace Internal
  
  } // namespace Toolkit