hachem.wtf
aboutsummaryrefslogtreecommitdiff
path: root/src/engine
diff options
context:
space:
mode:
Diffstat (limited to 'src/engine')
-rw-r--r--src/engine/engine.cpp20
-rw-r--r--src/engine/engine.h28
2 files changed, 35 insertions, 13 deletions
diff --git a/src/engine/engine.cpp b/src/engine/engine.cpp
index 9a88e9e..451684b 100644
--- a/src/engine/engine.cpp
+++ b/src/engine/engine.cpp
@@ -10,6 +10,7 @@
#include "engine.h"
#include "core/log.h"
+#include "core/hdri_manager.h"
#include "rendering/vertex_buffer.h"
#include "rendering/index_buffer.h"
@@ -36,6 +37,16 @@ namespace Donut
m_compute_program = create_compute_program("assets/shaders/geodesic.glsl");
m_blur_shader = Ref<Shader>(Shader::create("assets/shaders/blur.glsl"));
+ auto& hdri_manager = HDRIManager::get();
+ m_hdri_environment = hdri_manager.get_current_hdri();
+ if (!m_hdri_environment)
+ {
+ hdri_manager.set_current_hdri("assets/hdri/hdr_blue_nebulae_1.hdr");
+ m_hdri_environment = hdri_manager.get_current_hdri();
+ if (!m_hdri_environment)
+ DONUT_WARN("Failed to load default HDRI, using fallback");
+ }
+
m_camera_ubo = UniformBuffer::create(128, 1);
m_disk_ubo = UniformBuffer::create(sizeof(float) * 5, 2);
@@ -117,6 +128,9 @@ namespace Donut
void Engine::dispatch_compute(const Camera& cam)
{
+ auto& hdri_manager = HDRIManager::get();
+ m_hdri_environment = hdri_manager.get_current_hdri();
+
int cw = get_compute_width();
int ch = m_compute_height;
@@ -128,7 +142,10 @@ namespace Donut
upload_objects_ubo(m_objects);
upload_simulation_ubo();
m_texture->bind_as_image(0, false);
-
+
+ if (m_hdri_environment)
+ m_hdri_environment->bind(5);
+
uint32_t groups_x = static_cast<uint32_t>(std::ceil(cw / 16.0f));
uint32_t groups_y = static_cast<uint32_t>(std::ceil(ch / 16.0f));
m_compute_program->dispatch(groups_x, groups_y, 1);
@@ -508,4 +525,5 @@ namespace Donut
RenderCommand::set_viewport(0, 0, original_width, original_height);
}
+
}
diff --git a/src/engine/engine.h b/src/engine/engine.h
index 95cd1f0..88e0058 100644
--- a/src/engine/engine.h
+++ b/src/engine/engine.h
@@ -101,30 +101,34 @@ namespace Donut
void set_max_steps_static(int steps) { m_max_steps_static = steps; }
void set_early_exit_distance(float distance) { m_early_exit_distance = distance; }
- float get_disk_thickness() const { return m_disk_thickness; }
+ float get_disk_thickness() const { return m_disk_thickness; }
void set_disk_thickness(float thickness) { m_disk_thickness = thickness; }
- float get_disk_density() const { return m_disk_density; }
- void set_disk_density(float density) { m_disk_density = density; }
+ float get_disk_density() const { return m_disk_density; }
+ void set_disk_density(float density) { m_disk_density = density; }
- float get_rotation_speed() const { return m_rotation_speed; }
- void set_rotation_speed(float speed) { m_rotation_speed = speed; }
+ float get_rotation_speed() const { return m_rotation_speed; }
+ void set_rotation_speed(float speed) { m_rotation_speed = speed; }
- float get_blur_strength() const { return m_blur_strength; }
- void set_blur_strength(float strength) { m_blur_strength = strength; }
+ float get_blur_strength() const { return m_blur_strength; }
+ void set_blur_strength(float strength) { m_blur_strength = strength; }
- float get_glow_intensity() const { return m_glow_intensity; }
+ float get_glow_intensity() const { return m_glow_intensity; }
void set_glow_intensity(float intensity) { m_glow_intensity = intensity; }
void load_objects_from_scene(const std::vector<Donut::Object>& objects);
void export_high_res_frame(const std::string& filename, int width = 4096, int height = 3072);
void print_object_info() const;
+
+ void set_hdri_environment(Ref<CubemapTexture> hdri) { m_hdri_environment = hdri; }
+ Ref<CubemapTexture> get_hdri_environment() const { return m_hdri_environment; }
private:
Ref<Shader> create_compute_program(const char* path);
std::pair<Ref<VertexArray>, Ref<Texture2D>> quad_vao();
private:
Ref<VertexArray> m_quad_vao;
Ref<Texture2D> m_texture;
+ Ref<CubemapTexture> m_hdri_environment;
Ref<Shader> m_shader_program;
Ref<Shader> m_compute_program;
Ref<Shader> m_blur_shader;
@@ -135,8 +139,8 @@ namespace Donut
int m_width;
int m_height;
- float m_width_f = 100*10e10f;
- float m_height_f = 75*10e10f;
+ float m_width_f = 100.0f*1e10f;
+ float m_height_f = 75.0f*1e10f;
int m_target_fps = 60;
float m_current_fps = 60.0f;
@@ -150,9 +154,9 @@ namespace Donut
int m_max_steps_moving = 60000;
int m_max_steps_static = 30000;
- float m_early_exit_distance = 5e11f;
+ float m_early_exit_distance = 5.0e11f;
- float m_disk_thickness = 0.1;
+ float m_disk_thickness = 0.1f;
float m_disk_density = 0.1f;
float m_rotation_speed = 1.0f;
float m_blur_strength = 2.0f;