+const SamplerFlags::Type GetSingleValueSampler()
+{
+ static const SamplerFlags::Type SINGLE_VALUE_SAMPLER = SamplerFlags::Encode(FilterMode::NEAREST, FilterMode::NEAREST, WrapMode::CLAMP_TO_EDGE, WrapMode::CLAMP_TO_EDGE);
+ return SINGLE_VALUE_SAMPLER;
+}
+
+static constexpr std::string_view EMBEDDED_DATA_PREFIX = "data:";
+static constexpr std::string_view EMBEDDED_DATA_IMAGE_MEDIA_TYPE = "image/";
+static constexpr std::string_view EMBEDDED_DATA_BASE64_ENCODING_TYPE = "base64,";
+
+Dali::PixelData LoadImageResource(const std::string& resourcePath,
+ TextureDefinition& textureDefinition,
+ FittingMode::Type fittingMode,
+ bool orientationCorrection)
+{
+ Dali::PixelData pixelData;
+ if(!textureDefinition.mTextureBuffer.empty())
+ {
+ Dali::Devel::PixelBuffer pixelBuffer = Dali::LoadImageFromBuffer(textureDefinition.mTextureBuffer.data(), textureDefinition.mTextureBuffer.size(), textureDefinition.mMinImageDimensions, fittingMode, textureDefinition.mSamplingMode, orientationCorrection);
+ if(pixelBuffer)
+ {
+ pixelData = Devel::PixelBuffer::Convert(pixelBuffer);
+ }
+ }
+ else if(textureDefinition.mImageUri.find(EMBEDDED_DATA_PREFIX.data()) == 0 && textureDefinition.mImageUri.find(EMBEDDED_DATA_IMAGE_MEDIA_TYPE.data(), EMBEDDED_DATA_PREFIX.length()) == EMBEDDED_DATA_PREFIX.length())
+ {
+ uint32_t position = textureDefinition.mImageUri.find(EMBEDDED_DATA_BASE64_ENCODING_TYPE.data(), EMBEDDED_DATA_PREFIX.length() + EMBEDDED_DATA_IMAGE_MEDIA_TYPE.length());
+ if(position != std::string::npos)
+ {
+ position += EMBEDDED_DATA_BASE64_ENCODING_TYPE.length();
+ std::string_view data = std::string_view(textureDefinition.mImageUri).substr(position);
+ std::vector<uint8_t> buffer;
+ Dali::Toolkit::DecodeBase64FromString(data, buffer);
+ uint32_t bufferSize = buffer.size();
+
+ Dali::Devel::PixelBuffer pixelBuffer = Dali::LoadImageFromBuffer(reinterpret_cast<uint8_t*>(buffer.data()), bufferSize, textureDefinition.mMinImageDimensions, fittingMode, textureDefinition.mSamplingMode, orientationCorrection);
+ if(pixelBuffer)
+ {
+ pixelData = Devel::PixelBuffer::Convert(pixelBuffer);
+ }
+ }
+ }
+ else
+ {
+ pixelData = SyncImageLoader::Load(resourcePath + textureDefinition.mImageUri, textureDefinition.mMinImageDimensions, fittingMode, textureDefinition.mSamplingMode, orientationCorrection);
+ }
+ return pixelData;
+}