aboutsummaryrefslogtreecommitdiff
path: root/src/Core/HDRIManager.cpp
diff options
context:
space:
mode:
authorhachem <im@hachem.wtf>2025-08-22 12:24:05 +0200
committerhachem <im@hachem.wtf>2025-08-22 12:24:05 +0200
commit0d819f2b9a71e862bce8799c6b0c1304e62219b3 (patch)
treea3011c8f5b04c98de5a8a24bc2b4ded312de958e /src/Core/HDRIManager.cpp
parentc20a400e620154f0c334fe0a37d547625b6ee65b (diff)
[add]: add HDRI
Diffstat (limited to 'src/Core/HDRIManager.cpp')
-rw-r--r--src/Core/HDRIManager.cpp64
1 files changed, 64 insertions, 0 deletions
diff --git a/src/Core/HDRIManager.cpp b/src/Core/HDRIManager.cpp
new file mode 100644
index 0000000..6e420a6
--- /dev/null
+++ b/src/Core/HDRIManager.cpp
@@ -0,0 +1,64 @@
+#include "HDRIManager.h"
+#include <filesystem>
+
+namespace Donut
+{
+ Ref<CubemapTexture> HDRIManager::LoadHDRI(const std::string& path)
+ {
+ auto it = m_HDRICache.find(path);
+ if (it != m_HDRICache.end())
+ {
+ DONUT_INFO("HDRI already cached: {}", path);
+ return it->second;
+ }
+
+ DONUT_INFO("Loading HDRI: {}", path);
+ auto hdri = CubemapTexture::CreateFromHDRI(path);
+
+ if (hdri)
+ {
+ m_HDRICache[path] = hdri;
+ DONUT_INFO("Successfully loaded and cached HDRI: {}", path);
+ }
+ else
+ DONUT_ERROR("Failed to load HDRI: {}", path);
+
+ return hdri;
+ }
+
+ void HDRIManager::SetCurrentHDRI(const std::string& path)
+ {
+ auto hdri = LoadHDRI(path);
+ if (hdri)
+ {
+ m_CurrentHDRI = hdri;
+ DONUT_INFO("Set current HDRI to: {}", path);
+ }
+ else
+ DONUT_ERROR("Failed to set current HDRI: {}", path);
+ }
+
+ std::string HDRIManager::GetHDRIName(const std::string& path) const
+ {
+ std::filesystem::path filePath(path);
+ std::string filename = filePath.stem().string();
+ std::string name = filename;
+
+ for (size_t i = 0; i < name.length(); ++i)
+ {
+ if (name[i] == '_')
+ name[i] = ' ';
+ else if (i == 0 || name[i-1] == ' ')
+ name[i] = std::toupper(name[i]);
+ }
+
+ return name;
+ }
+
+ void HDRIManager::ClearCache()
+ {
+ m_HDRICache.clear();
+ m_CurrentHDRI.reset();
+ DONUT_INFO("HDRI cache cleared");
+ }
+};