X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fvisuals%2Fimage-atlas-manager.cpp;h=25fff3985a8fcb2e66ddf4fc0956382a2d6c1c37;hb=ff6ce970724ccc8bee65f7c93411b274907c09d7;hp=1f634e1d201e5f369183d4f79af3e94a41a1a609;hpb=2ca1c3856ce848a94f54444f1014a820e91ee207;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/visuals/image-atlas-manager.cpp b/dali-toolkit/internal/visuals/image-atlas-manager.cpp index 1f634e1..25fff39 100644 --- a/dali-toolkit/internal/visuals/image-atlas-manager.cpp +++ b/dali-toolkit/internal/visuals/image-atlas-manager.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 Samsung Electronics Co., Ltd. + * Copyright (c) 2022 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -21,6 +21,9 @@ // EXTERNAL HEADER #include +// INTERNAL HEADERS +#include + namespace Dali { namespace Toolkit @@ -43,8 +46,25 @@ ImageAtlasManager::~ImageAtlasManager() { } +bool ImageAtlasManager::CheckAtlasAvailable(const VisualUrl& url, const ImageDimensions& size) const +{ + ImageDimensions dimensions = size; + ImageDimensions zero; + if(size == zero) + { + dimensions = Dali::GetClosestImageSize(url.GetUrl()); + } + + // big image, atlasing is not applied + if(static_cast(dimensions.GetWidth()) * static_cast(dimensions.GetHeight()) > MAX_ITEM_AREA || dimensions.GetWidth() > DEFAULT_ATLAS_SIZE || dimensions.GetHeight() > DEFAULT_ATLAS_SIZE) + { + return false; + } + return true; +} + TextureSet ImageAtlasManager::Add(Vector4& textureRect, - const std::string& url, + const VisualUrl& url, ImageDimensions& size, FittingMode::Type fittingMode, bool orientationCorrection, @@ -54,7 +74,7 @@ TextureSet ImageAtlasManager::Add(Vector4& textureRect, ImageDimensions zero; if(size == zero) { - dimensions = Dali::GetClosestImageSize(url); + dimensions = Dali::GetClosestImageSize(url.GetUrl()); } // big image, atlasing is not applied @@ -64,10 +84,38 @@ TextureSet ImageAtlasManager::Add(Vector4& textureRect, } size = dimensions; - unsigned int i = 0; + uint32_t i = 0; + for(AtlasContainer::iterator iter = mAtlasList.begin(); iter != mAtlasList.end(); ++iter) + { + if(GetImplementation(*iter).Upload(textureRect, url, size, fittingMode, orientationCorrection, atlasUploadObserver)) + { + return mTextureSetList[i]; + } + i++; + } + + CreateNewAtlas(); + GetImplementation(mAtlasList.back()).Upload(textureRect, url, size, fittingMode, orientationCorrection, atlasUploadObserver); + return mTextureSetList.back(); +} + +TextureSet ImageAtlasManager::Add(Vector4& textureRect, + const EncodedImageBuffer& encodedImageBuffer, + const ImageDimensions& size, + FittingMode::Type fittingMode, + bool orientationCorrection, + AtlasUploadObserver* atlasUploadObserver) +{ + // big image, atlasing is not applied + if(static_cast(size.GetWidth()) * static_cast(size.GetHeight()) > MAX_ITEM_AREA || size.GetWidth() > DEFAULT_ATLAS_SIZE || size.GetHeight() > DEFAULT_ATLAS_SIZE) + { + return TextureSet(); + } + + uint32_t i = 0; for(AtlasContainer::iterator iter = mAtlasList.begin(); iter != mAtlasList.end(); ++iter) { - if((*iter).Upload(textureRect, url, size, fittingMode, orientationCorrection, atlasUploadObserver)) + if(GetImplementation(*iter).Upload(textureRect, encodedImageBuffer, size, fittingMode, orientationCorrection, atlasUploadObserver)) { return mTextureSetList[i]; } @@ -75,7 +123,7 @@ TextureSet ImageAtlasManager::Add(Vector4& textureRect, } CreateNewAtlas(); - mAtlasList.back().Upload(textureRect, url, size, fittingMode, orientationCorrection, atlasUploadObserver); + GetImplementation(mAtlasList.back()).Upload(textureRect, encodedImageBuffer, size, fittingMode, orientationCorrection, atlasUploadObserver); return mTextureSetList.back(); } @@ -88,7 +136,7 @@ TextureSet ImageAtlasManager::Add(Vector4& textureRect, return TextureSet(); } - unsigned int i = 0; + uint32_t i = 0; for(AtlasContainer::iterator iter = mAtlasList.begin(); iter != mAtlasList.end(); ++iter) { if((*iter).Upload(textureRect, pixelData)) @@ -105,7 +153,7 @@ TextureSet ImageAtlasManager::Add(Vector4& textureRect, void ImageAtlasManager::Remove(TextureSet textureSet, const Vector4& textureRect) { - unsigned int i = 0; + uint32_t i = 0; for(TextureSetContainer::iterator iter = mTextureSetList.begin(); iter != mTextureSetList.end(); ++iter) { if((*iter) == textureSet)