X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-scene3d%2Fpublic-api%2Floader%2Fenvironment-definition.cpp;h=9c74f23f02df949c60f348c9eea3f2d3f5d3989a;hb=HEAD;hp=5f4605e705e4e5c2b1674a85e85b62edb1081017;hpb=eccac5f0bf98e362a2d5cfef00598e90f949883d;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-scene3d/public-api/loader/environment-definition.cpp b/dali-scene3d/public-api/loader/environment-definition.cpp index 5f4605e..9c74f23 100644 --- a/dali-scene3d/public-api/loader/environment-definition.cpp +++ b/dali-scene3d/public-api/loader/environment-definition.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023 Samsung Electronics Co., Ltd. + * Copyright (c) 2024 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,8 +21,10 @@ // EXTERNAL INCLUDES #include #include +#include // INTERNAL INCLUDES +#include #include #include @@ -35,6 +37,7 @@ std::string GetDaliImagePath() } static constexpr float DEFAULT_INTENSITY = 1.0f; + } // unnamed namespace namespace Dali::Scene3D::Loader @@ -43,9 +46,26 @@ namespace { const char* PRE_COMPUTED_BRDF_TEXTURE_FILE_NAME = "brdfLUT.png"; } +PixelData EnvironmentDefinition::mBrdfPixelData; +Texture EnvironmentDefinition::mBrdfTexture; +bool EnvironmentDefinition::mIsBrdfLoaded = false; + +Dali::Texture EnvironmentDefinition::GetBrdfTexture() +{ + if(!mBrdfTexture) + { + if(!mIsBrdfLoaded) + { + LoadBrdfTexture(); + } + mBrdfTexture = Texture::New(TextureType::TEXTURE_2D, mBrdfPixelData.GetPixelFormat(), mBrdfPixelData.GetWidth(), mBrdfPixelData.GetHeight()); + mBrdfTexture.Upload(mBrdfPixelData); + } + return mBrdfTexture; +} EnvironmentDefinition::RawData -EnvironmentDefinition::LoadRaw(const std::string& environmentsPath) const +EnvironmentDefinition::LoadRaw(const std::string& environmentsPath) { RawData raw; auto loadFn = [&environmentsPath](const std::string& path, EnvironmentMapData& environmentMapData) { @@ -54,7 +74,7 @@ EnvironmentDefinition::LoadRaw(const std::string& environmentsPath) const environmentMapData.mPixelData.resize(6); for(auto& face : environmentMapData.mPixelData) { - face.push_back(PixelData::New(new uint8_t[3]{0xff, 0xff, 0xff}, 3, 1, 1, Pixel::RGB888, PixelData::DELETE_ARRAY)); + face.push_back(Dali::Scene3D::Internal::ImageResourceLoader::GetEmptyPixelDataWhiteRGB()); } environmentMapData.SetEnvironmentMapType(Dali::Scene3D::EnvironmentMapType::CUBEMAP); } @@ -69,16 +89,12 @@ EnvironmentDefinition::LoadRaw(const std::string& environmentsPath) const if(mUseBrdfTexture) { - Devel::PixelBuffer pixelBuffer = LoadImageFromFile(GetDaliImagePath() + PRE_COMPUTED_BRDF_TEXTURE_FILE_NAME); - if(pixelBuffer) - { - raw.mBrdf = Devel::PixelBuffer::Convert(pixelBuffer); - } + LoadBrdfTexture(); } return raw; } -EnvironmentDefinition::Textures EnvironmentDefinition::Load(RawData&& raw) const +EnvironmentDefinition::Textures EnvironmentDefinition::Load(RawData&& raw) { Textures textures; @@ -95,10 +111,9 @@ EnvironmentDefinition::Textures EnvironmentDefinition::Load(RawData&& raw) const textures.mSpecularMipmapLevels = raw.mSpecular.GetMipmapLevels(); } - if(raw.mBrdf) + if(mUseBrdfTexture) { - textures.mBrdf = Texture::New(TextureType::TEXTURE_2D, raw.mBrdf.GetPixelFormat(), raw.mBrdf.GetWidth(), raw.mBrdf.GetHeight()); - textures.mBrdf.Upload(raw.mBrdf); + textures.mBrdf = GetBrdfTexture(); } return textures; } @@ -108,4 +123,21 @@ float EnvironmentDefinition::GetDefaultIntensity() return DEFAULT_INTENSITY; } +void EnvironmentDefinition::LoadBrdfTexture() +{ + static Dali::Mutex mutex; + { + Mutex::ScopedLock lock(mutex); + if(!mIsBrdfLoaded) + { + Devel::PixelBuffer pixelBuffer = LoadImageFromFile(GetDaliImagePath() + PRE_COMPUTED_BRDF_TEXTURE_FILE_NAME); + if(pixelBuffer) + { + mBrdfPixelData = Devel::PixelBuffer::Convert(pixelBuffer); + mIsBrdfLoaded = true; + } + } + } +} + } // namespace Dali::Scene3D::Loader \ No newline at end of file