X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fvisuals%2Fanimated-image%2Frolling-animated-image-cache.cpp;h=b8a6961d2c5eefe7a0e253ecd59e8d5ea05af532;hp=33df7b80b418d4324a08679a4bf8e7be5108591b;hb=e483020277e28cd5f93a93cf50119edaac49a9e9;hpb=42e6d93abfd4fc9ced3b9f366ebbc32228aa490b;ds=sidebyside 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 33df7b8..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 @@ -27,16 +27,17 @@ namespace #if defined(DEBUG_ENABLED) Debug::Filter* gAnimImgLogFilter = Debug::Filter::New(Debug::NoLogging, false, "LOG_ANIMATED_IMAGE"); -#define LOG_CACHE \ - { \ - std::ostringstream oss; \ - oss << "Size:" << mQueue.Count() << " [ "; \ - for(std::size_t _i = 0; _i < mQueue.Count(); ++_i) \ - { \ - oss << _i << "={ frm#: " << mQueue[_i].mFrameNumber << " tex: " << mImageUrls[mQueue[_i].mFrameNumber].mTextureId << "}, "; \ - } \ - oss << " ]" << std::endl; \ - DALI_LOG_INFO(gAnimImgLogFilter, Debug::Concise, "%s", oss.str().c_str()); \ +#define LOG_CACHE \ + if(gAnimImgLogFilter->IsEnabledFor(Debug::Concise)) \ + { \ + std::ostringstream oss; \ + oss << "Size:" << mQueue.Count() << " [ "; \ + for(std::size_t _i = 0; _i < mQueue.Count(); ++_i) \ + { \ + oss << _i << "={ frm#: " << mQueue[_i].mFrameNumber << " tex: " << mTextureIds[mQueue[_i].mFrameNumber] << "}, "; \ + } \ + oss << " ]" << std::endl; \ + DALI_LOG_INFO(gAnimImgLogFilter, Debug::Concise, "%s", oss.str().c_str()); \ } #else @@ -65,16 +66,23 @@ RollingAnimatedImageCache::RollingAnimatedImageCache(TextureManager& ImageCache::FrameReadyObserver& observer, uint16_t cacheSize, uint16_t batchSize, - bool isSynchronousLoading) + const Dali::WrapMode::Type& wrapModeU, + const Dali::WrapMode::Type& wrapModeV, + bool isSynchronousLoading, + bool preMultiplyOnLoad) : ImageCache(textureManager, maskingData, observer, batchSize, 0u), + mImageUrl(animatedImageLoading.GetUrl()), mAnimatedImageLoading(animatedImageLoading), mFrameCount(SINGLE_IMAGE_COUNT), mFrameIndex(FIRST_FRAME_INDEX), mCacheSize(cacheSize), mQueue(cacheSize), - mIsSynchronousLoading(isSynchronousLoading) + mWrapModeU(wrapModeU), + mWrapModeV(wrapModeV), + mIsSynchronousLoading(isSynchronousLoading), + mPreMultiplyOnLoad(preMultiplyOnLoad) { - mImageUrls.resize(mFrameCount); + mTextureIds.resize(mFrameCount); mIntervals.assign(mFrameCount, 0); } @@ -190,18 +198,23 @@ TextureSet RollingAnimatedImageCache::RequestFrameLoading(uint32_t frameIndex, b mLoadState = TextureManager::LoadState::LOADING; + auto preMultiplyOnLoading = mPreMultiplyOnLoad ? TextureManager::MultiplyOnLoad::MULTIPLY_ON_LOAD + : TextureManager::MultiplyOnLoad::LOAD_WITHOUT_MULTIPLY; + TextureManager::TextureId loadTextureId = TextureManager::INVALID_TEXTURE_ID; - TextureSet textureSet = mTextureManager.LoadAnimatedImageTexture(mAnimatedImageLoading, + TextureSet textureSet = mTextureManager.LoadAnimatedImageTexture(mImageUrl, + mAnimatedImageLoading, frameIndex, loadTextureId, mMaskingData, SamplingMode::BOX_THEN_LINEAR, - Dali::WrapMode::Type::DEFAULT, - Dali::WrapMode::Type::DEFAULT, + mWrapModeU, + mWrapModeV, synchronousLoading, - this); + this, + preMultiplyOnLoading); - mImageUrls[frameIndex].mTextureId = loadTextureId; + mTextureIds[frameIndex] = loadTextureId; return textureSet; } @@ -252,14 +265,14 @@ TextureSet RollingAnimatedImageCache::GetFrontTextureSet() const TextureManager::TextureId RollingAnimatedImageCache::GetCachedTextureId(int index) const { - return mImageUrls[mQueue[index].mFrameNumber].mTextureId; + return mTextureIds[mQueue[index].mFrameNumber]; } void RollingAnimatedImageCache::PopFrontCache() { ImageFrame imageFrame = mQueue.PopFront(); - mTextureManager.Remove(mImageUrls[imageFrame.mFrameNumber].mTextureId, this); - mImageUrls[imageFrame.mFrameNumber].mTextureId = TextureManager::INVALID_TEXTURE_ID; + mTextureManager.Remove(mTextureIds[imageFrame.mFrameNumber], this); + mTextureIds[imageFrame.mFrameNumber] = TextureManager::INVALID_TEXTURE_ID; if(mMaskingData && mMaskingData->mAlphaMaskId != TextureManager::INVALID_TEXTURE_ID) { @@ -296,7 +309,7 @@ void RollingAnimatedImageCache::MakeFrameReady(bool loadSuccess, TextureSet text if(mFrameCount != mAnimatedImageLoading.GetImageCount()) { mFrameCount = mAnimatedImageLoading.GetImageCount(); - mImageUrls.resize(mFrameCount); + mTextureIds.resize(mFrameCount); mIntervals.assign(mFrameCount, 0u); } @@ -319,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) {