X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fvisuals%2Fimage-atlas-manager.cpp;h=1f634e1d201e5f369183d4f79af3e94a41a1a609;hp=a8de5a84e4ac940974393fe3ce9753c3b3a8d732;hb=HEAD;hpb=b0faad981257720e1a5fb15af45647f30b669adf diff --git a/dali-toolkit/internal/visuals/image-atlas-manager.cpp b/dali-toolkit/internal/visuals/image-atlas-manager.cpp index a8de5a8..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. @@ -46,6 +46,23 @@ 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 VisualUrl& url, ImageDimensions& size, @@ -67,7 +84,7 @@ 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)) @@ -82,6 +99,34 @@ TextureSet ImageAtlasManager::Add(Vector4& textureRect, 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(GetImplementation(*iter).Upload(textureRect, encodedImageBuffer, size, fittingMode, orientationCorrection, atlasUploadObserver)) + { + return mTextureSetList[i]; + } + i++; + } + + CreateNewAtlas(); + GetImplementation(mAtlasList.back()).Upload(textureRect, encodedImageBuffer, size, fittingMode, orientationCorrection, atlasUploadObserver); + return mTextureSetList.back(); +} + TextureSet ImageAtlasManager::Add(Vector4& textureRect, PixelData pixelData) { @@ -91,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)) @@ -108,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)