From e483020277e28cd5f93a93cf50119edaac49a9e9 Mon Sep 17 00:00:00 2001 From: tscholb Date: Tue, 5 Jul 2022 16:44:03 +0900 Subject: [PATCH] Apply WrapMode in animated visual animated visual only support default wrap mode. After this patch, animated visual can use other wrap mode. Change-Id: I8ac58895a724d1ff510577d76d30320cf501739f --- automated-tests/resources/dali-logo.webp | Bin 0 -> 9822 bytes .../dali-toolkit/utc-Dali-AnimatedImageVisual.cpp | 69 +++++++++++++++++++++ .../animated-image/animated-image-visual.cpp | 2 +- .../rolling-animated-image-cache.cpp | 18 +++++- .../animated-image/rolling-animated-image-cache.h | 7 +++ 5 files changed, 92 insertions(+), 4 deletions(-) create mode 100644 automated-tests/resources/dali-logo.webp diff --git a/automated-tests/resources/dali-logo.webp b/automated-tests/resources/dali-logo.webp new file mode 100644 index 0000000000000000000000000000000000000000..2f0eb2ba803859ee2a20a24e59637d3ef2b900e1 GIT binary patch literal 9822 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 E0IG`|ssI20 literal 0 HcmV?d00001 diff --git a/automated-tests/src/dali-toolkit/utc-Dali-AnimatedImageVisual.cpp b/automated-tests/src/dali-toolkit/utc-Dali-AnimatedImageVisual.cpp index 6e8c9d7..9870308 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-AnimatedImageVisual.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-AnimatedImageVisual.cpp @@ -49,6 +49,7 @@ namespace const char* TEST_IMAGE_FILE_NAME = TEST_RESOURCE_DIR "/application-icon-%02d.png"; const char* TEST_GIF_FILE_NAME = TEST_RESOURCE_DIR "/anim.gif"; const char* TEST_MASK_IMAGE_FILE_NAME = TEST_RESOURCE_DIR "/mask.png"; +const char* TEST_WEBP_FILE_NAME = TEST_RESOURCE_DIR "/dali-logo.webp"; } // namespace void CopyUrlsIntoArray(Property::Array& urls, int startIndex = 0) @@ -1779,3 +1780,71 @@ int UtcDaliAnimatedImageVisualPlayback(void) END_TEST; } + +int UtcDaliAnimatedImageVisualWrapMode(void) +{ + ToolkitTestApplication application; + tet_infoline("UtcDaliAnimatedImageVisualWrapMode"); + + VisualFactory factory = VisualFactory::Get(); + DALI_TEST_CHECK(factory); + + // Test wrap mode in animated image visual. + const int width = 950; + const int height = 1080; + const Vector4 pixelArea(0.0f, 0.0f, 950/ 40, 1.0f); + + Property::Map propertyMap; + propertyMap.Insert(Toolkit::Visual::Property::TYPE, Visual::IMAGE); + propertyMap.Insert(ImageVisual::Property::URL, TEST_WEBP_FILE_NAME); + propertyMap.Insert(ImageVisual::Property::PIXEL_AREA, pixelArea); + propertyMap.Insert(ImageVisual::Property::WRAP_MODE_U, WrapMode::REPEAT); + + Visual::Base visual = factory.CreateVisual(propertyMap); + DALI_TEST_CHECK(visual); + + TestGlAbstraction& gl = application.GetGlAbstraction(); + TraceCallStack& textureTrace = gl.GetTextureTrace(); + textureTrace.Enable(true); + textureTrace.EnableLogging(true); + TraceCallStack& texParameterTrace = gl.GetTexParameterTrace(); + texParameterTrace.Enable(true); + texParameterTrace.EnableLogging(true); + + DummyControl actor = DummyControl::New(); + DummyControlImpl& dummyImpl = static_cast(actor.GetImplementation()); + dummyImpl.RegisterVisual(Control::CONTROL_PROPERTY_END_INDEX + 1, visual); + actor.SetProperty(Actor::Property::SIZE, Vector2(width, height)); + actor.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER); + + DALI_TEST_EQUALS(actor.GetRendererCount(), 0u, TEST_LOCATION); + application.GetScene().Add(actor); + application.SendNotification(); + application.Render(); + + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION); + + application.SendNotification(); + application.Render(); + + DALI_TEST_CHECK(actor.GetRendererCount() == 1u); + + DALI_TEST_EQUALS(textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION); + + // WITHOUT atlasing, the wrapping is handled by setting gl texture parameters + std::stringstream out; + out << std::hex << GL_TEXTURE_2D << ", " << GL_TEXTURE_WRAP_S << ", " << GL_REPEAT; + DALI_TEST_CHECK(texParameterTrace.FindMethodAndParams("TexParameteri", out.str())); + + // test the uniforms which used to handle the wrap mode + Renderer renderer = actor.GetRendererAt(0u); + DALI_TEST_CHECK(renderer); + + Property::Value pixelAreaValue = renderer.GetProperty(renderer.GetPropertyIndex("pixelArea")); + DALI_TEST_EQUALS(pixelAreaValue.Get(), pixelArea, TEST_LOCATION); + + actor.Unparent(); + DALI_TEST_CHECK(actor.GetRendererCount() == 0u); + + END_TEST; +} diff --git a/dali-toolkit/internal/visuals/animated-image/animated-image-visual.cpp b/dali-toolkit/internal/visuals/animated-image/animated-image-visual.cpp index 382d52b..db00ff5 100644 --- a/dali-toolkit/internal/visuals/animated-image/animated-image-visual.cpp +++ b/dali-toolkit/internal/visuals/animated-image/animated-image-visual.cpp @@ -178,7 +178,7 @@ void AnimatedImageVisual::CreateImageCache() if(mAnimatedImageLoading) { - mImageCache = new RollingAnimatedImageCache(textureManager, mAnimatedImageLoading, mMaskingData, *this, mCacheSize, mBatchSize, IsSynchronousLoadingRequired(), mFactoryCache.GetPreMultiplyOnLoad()); + mImageCache = new RollingAnimatedImageCache(textureManager, mAnimatedImageLoading, mMaskingData, *this, mCacheSize, mBatchSize, mWrapModeU, mWrapModeV, IsSynchronousLoadingRequired(), mFactoryCache.GetPreMultiplyOnLoad()); } else if(mImageUrls) { diff --git a/dali-toolkit/internal/visuals/animated-image/rolling-animated-image-cache.cpp b/dali-toolkit/internal/visuals/animated-image/rolling-animated-image-cache.cpp index 74ec088..b8a6961 100644 --- a/dali-toolkit/internal/visuals/animated-image/rolling-animated-image-cache.cpp +++ b/dali-toolkit/internal/visuals/animated-image/rolling-animated-image-cache.cpp @@ -66,6 +66,8 @@ RollingAnimatedImageCache::RollingAnimatedImageCache(TextureManager& ImageCache::FrameReadyObserver& observer, uint16_t cacheSize, uint16_t batchSize, + const Dali::WrapMode::Type& wrapModeU, + const Dali::WrapMode::Type& wrapModeV, bool isSynchronousLoading, bool preMultiplyOnLoad) : ImageCache(textureManager, maskingData, observer, batchSize, 0u), @@ -75,6 +77,8 @@ RollingAnimatedImageCache::RollingAnimatedImageCache(TextureManager& mFrameIndex(FIRST_FRAME_INDEX), mCacheSize(cacheSize), mQueue(cacheSize), + mWrapModeU(wrapModeU), + mWrapModeV(wrapModeV), mIsSynchronousLoading(isSynchronousLoading), mPreMultiplyOnLoad(preMultiplyOnLoad) { @@ -204,8 +208,8 @@ TextureSet RollingAnimatedImageCache::RequestFrameLoading(uint32_t frameIndex, b loadTextureId, mMaskingData, SamplingMode::BOX_THEN_LINEAR, - Dali::WrapMode::Type::DEFAULT, - Dali::WrapMode::Type::DEFAULT, + mWrapModeU, + mWrapModeV, synchronousLoading, this, preMultiplyOnLoading); @@ -328,7 +332,15 @@ void RollingAnimatedImageCache::LoadComplete(bool loadSuccess, TextureInformatio DALI_LOG_INFO(gAnimImgLogFilter, Debug::Concise, "AnimatedImageVisual::LoadComplete(textureId:%d) start\n", textureInformation.textureId); LOG_CACHE; - MakeFrameReady(loadSuccess, mTextureManager.GetTextureSet(textureInformation.textureId), textureInformation.interval); + TextureSet textureSet = mTextureManager.GetTextureSet(textureInformation.textureId); + if(textureSet) + { + Sampler sampler = Sampler::New(); + sampler.SetWrapMode(mWrapModeU, mWrapModeV); + textureSet.SetSampler(0u, sampler); + } + + MakeFrameReady(loadSuccess, textureSet, textureInformation.interval); if(loadSuccess) { diff --git a/dali-toolkit/internal/visuals/animated-image/rolling-animated-image-cache.h b/dali-toolkit/internal/visuals/animated-image/rolling-animated-image-cache.h index 59729de..8fed2d7 100644 --- a/dali-toolkit/internal/visuals/animated-image/rolling-animated-image-cache.h +++ b/dali-toolkit/internal/visuals/animated-image/rolling-animated-image-cache.h @@ -47,7 +47,10 @@ public: * @param[in] observer FrameReady observer * @param[in] cacheSize The size of the cache * @param[in] batchSize The size of a batch to load + * @param[in] wrapModeU Horizontal Wrap mode + * @param[in] wrapModeV Vertical Wrap mode * @param[in] isSynchronousLoading The flag to define whether to load first frame synchronously + * @param[in] preMultiplyOnLoad The flag if image's color should be multiplied by it's alpha * * This will start loading textures immediately, according to the * batch and cache sizes. @@ -58,6 +61,8 @@ public: ImageCache::FrameReadyObserver& observer, uint16_t cacheSize, uint16_t batchSize, + const Dali::WrapMode::Type& wrapModeU, + const Dali::WrapMode::Type& wrapModeV, bool isSynchronousLoading, bool preMultiplyOnLoad); @@ -181,6 +186,8 @@ private: std::vector mIntervals; std::vector mLoadWaitingQueue; CircularQueue mQueue; + Dali::WrapMode::Type mWrapModeU : 3; + Dali::WrapMode::Type mWrapModeV : 3; bool mIsSynchronousLoading; bool mPreMultiplyOnLoad; }; -- 2.7.4