hachem.wtf
aboutsummaryrefslogtreecommitdiff
path: root/src/core/hdri_manager.h
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.h
parentb9de06951631d9969c52c6ed95de17a6d8aad121 (diff)
feat: add HDRI
Diffstat (limited to 'src/core/hdri_manager.h')
-rw-r--r--src/core/hdri_manager.h46
1 files changed, 46 insertions, 0 deletions
diff --git a/src/core/hdri_manager.h b/src/core/hdri_manager.h
new file mode 100644
index 0000000..5ccd402
--- /dev/null
+++ b/src/core/hdri_manager.h
@@ -0,0 +1,46 @@
+#pragma once
+
+#include "core/log.h"
+#include "rendering/texture.h"
+
+#include <string>
+#include <unordered_map>
+#include <memory>
+
+namespace Donut
+{
+ class HDRIManager
+ {
+ public:
+ static HDRIManager& get()
+ {
+ static HDRIManager instance;
+ return instance;
+ }
+
+ Ref<CubemapTexture> load_hdri(const std::string& path);
+ Ref<CubemapTexture> get_current_hdri() const { return m_current_hdri; }
+
+ void set_current_hdri(const std::string& path);
+ const std::vector<std::string>& get_available_hdri() const { return m_available_hdri; }
+ std::string get_hdri_name(const std::string& path) const;
+ void clear_cache();
+ private:
+ HDRIManager() = default;
+ ~HDRIManager() = default;
+
+ HDRIManager(const HDRIManager&) = delete;
+ HDRIManager& operator=(const HDRIManager&) = delete;
+
+ std::unordered_map<std::string, Ref<CubemapTexture>> m_hdri_cache;
+
+ Ref<CubemapTexture> m_current_hdri;
+
+ std::vector<std::string> m_available_hdri =
+ {
+ "assets/hdri/hdr_blue_nebulae_1.hdr",
+ "assets/hdri/hdr_subdued_blue_nebulae.hdr",
+ "assets/hdri/hdr_subdued_multi_nebulae.hdr"
+ };
+ };
+};