From a502d6a9b7d780c2f2d71ab950a7ea13467976d7 Mon Sep 17 00:00:00 2001 From: Heeyong Song Date: Mon, 13 Aug 2018 16:55:03 +0900 Subject: [PATCH] Fix a custom shader issue - Fix a hash key generation in the texture manager - Set a pre-multiplied state according to the flag Change-Id: I22481d3a01f9634f8ec2d85506034d8142b2ceaa --- .../utc-Dali-TextureManager.cpp | 27 ++++++++++++++++++++++ .../internal/visuals/image/image-visual.cpp | 15 ++++-------- .../internal/visuals/npatch/npatch-visual.cpp | 5 +--- .../internal/visuals/texture-manager-impl.cpp | 15 +++++++++++- 4 files changed, 47 insertions(+), 15 deletions(-) diff --git a/automated-tests/src/dali-toolkit-internal/utc-Dali-TextureManager.cpp b/automated-tests/src/dali-toolkit-internal/utc-Dali-TextureManager.cpp index af5f1a6..d72bf17 100644 --- a/automated-tests/src/dali-toolkit-internal/utc-Dali-TextureManager.cpp +++ b/automated-tests/src/dali-toolkit-internal/utc-Dali-TextureManager.cpp @@ -72,3 +72,30 @@ int UtcTextureManagerRequestLoad(void) END_TEST; } + +int UtcTextureManagerGenerateHash(void) +{ + ToolkitTestApplication application; + + TextureManager textureManager; // Create new texture manager + + TestObserver observer; + std::string filename( "image.png" ); + auto preMultiply = TextureManager::MultiplyOnLoad::LOAD_WITHOUT_MULTIPLY; + TextureManager::TextureId textureId = textureManager.RequestLoad( + filename, + ImageDimensions(), + FittingMode::SCALE_TO_FILL, + SamplingMode::BOX_THEN_LINEAR, + TextureManager::USE_ATLAS, + &observer, + true, + TextureManager::ReloadPolicy::CACHED, + preMultiply); + + VisualUrl url = textureManager.GetVisualUrl( textureId ); + + DALI_TEST_EQUALS( url.GetUrl().compare( filename ), 0, TEST_LOCATION ); + + END_TEST; +} diff --git a/dali-toolkit/internal/visuals/image/image-visual.cpp b/dali-toolkit/internal/visuals/image/image-visual.cpp index faeeaec..2fb7e5d 100644 --- a/dali-toolkit/internal/visuals/image/image-visual.cpp +++ b/dali-toolkit/internal/visuals/image/image-visual.cpp @@ -689,10 +689,7 @@ void ImageVisual::CreateRenderer( TextureSet& textureSet ) //Register transform properties mImpl->mTransform.RegisterUniforms( mImpl->mRenderer, Direction::LEFT_TO_RIGHT ); - if( IsPreMultipliedAlphaEnabled() ) - { - EnablePreMultipliedAlpha( true ); - } + EnablePreMultipliedAlpha( IsPreMultipliedAlphaEnabled() ); } void ImageVisual::CreateNativeImageRenderer( NativeImage& nativeImage ) @@ -779,9 +776,9 @@ void ImageVisual::LoadTexture( bool& atlasing, Vector4& atlasRect, TextureSet& t mWrapModeV, textureObserver, atlasUploadObserver, atlasManager, mOrientationCorrection, forceReload, preMultiplyOnLoad); - if( textures && preMultiplyOnLoad == TextureManager::MultiplyOnLoad::MULTIPLY_ON_LOAD) + if( textures ) { - EnablePreMultipliedAlpha( true ); + EnablePreMultipliedAlpha( preMultiplyOnLoad == TextureManager::MultiplyOnLoad::MULTIPLY_ON_LOAD ); } if( atlasing ) // Flag needs to be set before creating renderer @@ -1087,10 +1084,8 @@ void ImageVisual::UploadComplete( bool loadingSuccess, int32_t textureId, Textur { mImpl->mRenderer.RegisterProperty( ATLAS_RECT_UNIFORM_NAME, mAtlasRect ); } - else if( preMultiplied ) - { - EnablePreMultipliedAlpha( true ); - } + + EnablePreMultipliedAlpha( preMultiplied ); actor.AddRenderer( mImpl->mRenderer ); // reset the weak handle so that the renderer only get added to actor once diff --git a/dali-toolkit/internal/visuals/npatch/npatch-visual.cpp b/dali-toolkit/internal/visuals/npatch/npatch-visual.cpp index dcf734e..6ae1d8e 100755 --- a/dali-toolkit/internal/visuals/npatch/npatch-visual.cpp +++ b/dali-toolkit/internal/visuals/npatch/npatch-visual.cpp @@ -295,10 +295,7 @@ void NPatchVisual::LoadImages() mId = mLoader.Load( mImageUrl.GetUrl(), mBorder, preMultiplyOnLoad ); - if( preMultiplyOnLoad ) - { - EnablePreMultipliedAlpha( true ); - } + EnablePreMultipliedAlpha( preMultiplyOnLoad ); } if( ! mAuxiliaryPixelBuffer && mAuxiliaryUrl.IsValid() && mAuxiliaryUrl.IsLocalResource() ) diff --git a/dali-toolkit/internal/visuals/texture-manager-impl.cpp b/dali-toolkit/internal/visuals/texture-manager-impl.cpp index c617a51..1ea95a9 100644 --- a/dali-toolkit/internal/visuals/texture-manager-impl.cpp +++ b/dali-toolkit/internal/visuals/texture-manager-impl.cpp @@ -932,8 +932,21 @@ TextureManager::TextureHash TextureManager::GenerateHash( { // We are not including sizing information, but we still need an extra byte for atlasing. hashTarget.resize( urlLength + 1u ); + // Add the atlasing to the hash input. - hashTarget[ urlLength ] = useAtlas; + switch( useAtlas ) + { + case UseAtlas::NO_ATLAS: + { + hashTarget[ urlLength ] = 'f'; + break; + } + case UseAtlas::USE_ATLAS: + { + hashTarget[ urlLength ] = 't'; + break; + } + } } if( maskTextureId != INVALID_TEXTURE_ID ) -- 2.7.4