From 6feedf506f712d61c0e57097dfbb1acd429c0e8c Mon Sep 17 00:00:00 2001 From: seungho Date: Wed, 28 Oct 2020 18:00:59 +0900 Subject: [PATCH] [Tizen] Fix Animated Image Visual issue of using same file in multiple visual Change-Id: I92c44cede1d595fd3c278bf71e5200a6b6d70c2e Signed-off-by: seungho --- .../internal/visuals/texture-manager-impl.cpp | 42 ++++++++-------------- .../internal/visuals/texture-manager-impl.h | 11 ++---- 2 files changed, 17 insertions(+), 36 deletions(-) diff --git a/dali-toolkit/internal/visuals/texture-manager-impl.cpp b/dali-toolkit/internal/visuals/texture-manager-impl.cpp index 64bbb5b..1de8a80 100644 --- a/dali-toolkit/internal/visuals/texture-manager-impl.cpp +++ b/dali-toolkit/internal/visuals/texture-manager-impl.cpp @@ -38,6 +38,7 @@ namespace { +constexpr auto INITIAL_CACHE_NUMBER = size_t{0u}; constexpr auto DEFAULT_NUMBER_OF_LOCAL_LOADER_THREADS = size_t{4u}; constexpr auto DEFAULT_NUMBER_OF_REMOTE_LOADER_THREADS = size_t{8u}; @@ -454,14 +455,18 @@ TextureManager::TextureId TextureManager::RequestLoadInternal( { // First check if the requested Texture is cached. bool isAnimatedImage = ( animatedImageLoading ) ? true : false; - const TextureHash textureHash = GenerateHash( url.GetUrl(), desiredSize, fittingMode, samplingMode, useAtlas, - maskTextureId, storageType, isAnimatedImage, frameIndex ); - TextureManager::TextureId textureId = INVALID_TEXTURE_ID; - // Look up the texture by hash. Note: The extra parameters are used in case of a hash collision. - int cacheIndex = FindCachedTexture( textureHash, url.GetUrl(), desiredSize, fittingMode, samplingMode, useAtlas, - maskTextureId, preMultiplyOnLoad, storageType, isAnimatedImage, frameIndex ); + TextureHash textureHash = INITIAL_CACHE_NUMBER; + int cacheIndex = INVALID_CACHE_INDEX; + if(!isAnimatedImage) + { + textureHash = GenerateHash(url.GetUrl(), desiredSize, fittingMode, samplingMode, useAtlas, maskTextureId, storageType); + // Look up the texture by hash. Note: The extra parameters are used in case of a hash collision. + cacheIndex = FindCachedTexture(textureHash, url.GetUrl(), desiredSize, fittingMode, samplingMode, useAtlas, maskTextureId, preMultiplyOnLoad, storageType); + } + + TextureManager::TextureId textureId = INVALID_TEXTURE_ID; // Check if the requested Texture exists in the cache. if( cacheIndex != INVALID_CACHE_INDEX ) { @@ -1163,9 +1168,7 @@ TextureManager::TextureHash TextureManager::GenerateHash( const Dali::SamplingMode::Type samplingMode, const UseAtlas useAtlas, TextureId maskTextureId, - StorageType storageType, - bool isAnimationImage, - uint32_t frameIndex ) + StorageType storageType) { std::string hashTarget( url ); const size_t urlLength = hashTarget.length(); @@ -1210,19 +1213,6 @@ TextureManager::TextureHash TextureManager::GenerateHash( } } - if( isAnimationImage ) - { - auto textureIdIndex = hashTarget.length(); - hashTarget.resize( hashTarget.length() + sizeof( uint32_t ) ); - char* hashTargetPtr = &( hashTarget[ textureIdIndex ] ); - - for( size_t byteIter = 0; byteIter < sizeof( uint32_t ); ++byteIter ) - { - *hashTargetPtr++ = frameIndex & 0xff; - frameIndex >>= 8u; - } - } - if( maskTextureId != INVALID_TEXTURE_ID ) { auto textureIdIndex = hashTarget.length(); @@ -1250,9 +1240,7 @@ int TextureManager::FindCachedTexture( const bool useAtlas, TextureId maskTextureId, TextureManager::MultiplyOnLoad preMultiplyOnLoad, - StorageType storageType, - bool isAnimatedImage, - uint32_t frameIndex ) + StorageType storageType) { // Default to an invalid ID, in case we do not find a match. int cacheIndex = INVALID_CACHE_INDEX; @@ -1273,9 +1261,7 @@ int TextureManager::FindCachedTexture( ( ( size.GetWidth() == 0 && size.GetHeight() == 0 ) || ( fittingMode == textureInfo.fittingMode && samplingMode == textureInfo.samplingMode ) ) && - ( storageType == textureInfo.storageType ) && - ( isAnimatedImage == ( ( textureInfo.animatedImageLoading ) ? true : false ) ) && - ( frameIndex == textureInfo.frameIndex ) ) + ( storageType == textureInfo.storageType ) ) { // 1. If preMultiplyOnLoad is MULTIPLY_ON_LOAD, then textureInfo.preMultiplyOnLoad should be true. The premultiplication result can be different. // 2. If preMultiplyOnLoad is LOAD_WITHOUT_MULTIPLY, then textureInfo.preMultiplied should be false. diff --git a/dali-toolkit/internal/visuals/texture-manager-impl.h b/dali-toolkit/internal/visuals/texture-manager-impl.h index f8500c7..2756558 100644 --- a/dali-toolkit/internal/visuals/texture-manager-impl.h +++ b/dali-toolkit/internal/visuals/texture-manager-impl.h @@ -746,14 +746,13 @@ private: * @param[in] samplingMode The SamplingMode to use * @param[in] useAtlas True if atlased * @param[in] maskTextureId The masking texture id (or INVALID_TEXTURE_ID) - * @param[in] isAnimatedImage The boolean value to know whether the request is for animated image or not - * @param[in] frameIndex The frame index of a frame to be loaded frame + * @param[in] storageType Whether the pixel data is stored in the cache, returned with PixelBuffer or uploaded to the GPU * @return A hash of the provided data for caching. */ TextureHash GenerateHash( const std::string& url, const ImageDimensions size, const FittingMode::Type fittingMode, const Dali::SamplingMode::Type samplingMode, const UseAtlas useAtlas, - TextureId maskTextureId, StorageType storageType, bool isAnimatedImage, uint32_t frameIndex ); + TextureId maskTextureId, StorageType storageType ); /** * @brief Looks up a cached texture by its hash. @@ -767,8 +766,6 @@ private: * @param[in] maskTextureId Optional texture ID to use to mask this image * @param[in] preMultiplyOnLoad if the image's color should be multiplied by it's alpha. Set to OFF if there is no alpha. * @param[in] storageType Whether the pixel data is stored in the cache, returned with PixelBuffer or uploaded to the GPU - * @param[in] isAnimatedImage The boolean value to know whether the request is for animated image or not - * @param[in] frameIndex The frame index of a frame to be loaded frame * @return A TextureId of a cached Texture if found. Or INVALID_TEXTURE_ID if not found. */ TextureManager::TextureId FindCachedTexture( @@ -780,9 +777,7 @@ private: const bool useAtlas, TextureId maskTextureId, MultiplyOnLoad preMultiplyOnLoad, - StorageType storageType, - bool isAnimatedImage, - uint32_t frameIndex ); + StorageType storageType ); private: -- 2.7.4