hachem.wtf
aboutsummaryrefslogtreecommitdiff
path: root/src/core/hdri_manager.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
commit2c8002d30f291cba832a5750212009d48238c308 (patch)
tree4aafc468441b3e32c267040830b8e0b5af859faf /src/core/hdri_manager.cpp
parentb9de06951631d9969c52c6ed95de17a6d8aad121 (diff)
feat: add HDRI
Diffstat (limited to 'src/core/hdri_manager.cpp')
-rw-r--r--src/core/hdri_manager.cpp64
1 files changed, 64 insertions, 0 deletions
diff --git a/src/core/hdri_manager.cpp b/src/core/hdri_manager.cpp
new file mode 100644
index 0000000..1a5521e
--- /dev/null
+++ b/src/core/hdri_manager.cpp
@@ -0,0 +1,64 @@
+#include "hdri_manager.h"
+#include <filesystem>
+
+namespace Donut
+{
+ Ref<CubemapTexture> HDRIManager::load_hdri(const std::string& path)
+ {
+ auto it = m_hdri_cache.find(path);
+ if (it != m_hdri_cache.end())
+ {
+ DONUT_INFO("HDRI already cached: {}", path);
+ return it->second;
+ }
+
+ DONUT_INFO("Loading HDRI: {}", path);
+ auto hdri = CubemapTexture::create_from_hdri(path);
+
+ if (hdri)
+ {
+ m_hdri_cache[path] = hdri;
+ DONUT_INFO("Successfully loaded and cached HDRI: {}", path);
+ }
+ else
+ DONUT_ERROR("Failed to load HDRI: {}", path);
+
+ return hdri;
+ }
+
+ void HDRIManager::set_current_hdri(const std::string& path)
+ {
+ auto hdri = load_hdri(path);
+ if (hdri)
+ {
+ m_current_hdri = hdri;
+ DONUT_INFO("Set current HDRI to: {}", path);
+ }
+ else
+ DONUT_ERROR("Failed to set current HDRI: {}", path);
+ }
+
+ std::string HDRIManager::get_hdri_name(const std::string& path) const
+ {
+ std::filesystem::path file_path(path);
+ std::string filename = file_path.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::clear_cache()
+ {
+ m_hdri_cache.clear();
+ m_current_hdri.reset();
+ DONUT_INFO("HDRI cache cleared");
+ }
+};