hachem.wtf
aboutsummaryrefslogtreecommitdiff
path: root/src/engine/engine.cpp
diff options
context:
space:
mode:
authorhachem <im@hachem.wtf>2025-08-16 15:36:25 +0200
committerhachem <im@hachem.wtf>2025-08-16 15:36:25 +0200
commit8f906c3139a813b9a829821944b464b3facdad59 (patch)
treebb516369660344b254dc504ef28a079920e1d6f9 /src/engine/engine.cpp
parenta6655eebe2a69ee427264bd43df5747851ed96df (diff)
fix: first optimization
Diffstat (limited to 'src/engine/engine.cpp')
-rw-r--r--src/engine/engine.cpp22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/engine/engine.cpp b/src/engine/engine.cpp
index c2a84a8..c9a23ca 100644
--- a/src/engine/engine.cpp
+++ b/src/engine/engine.cpp
@@ -39,6 +39,8 @@ namespace Donut
+ 16 * (sizeof(glm::vec4) + sizeof(glm::vec4))
+ 16 * sizeof(float);
m_objects_ubo = UniformBuffer::create(obj_ubo_size, 3);
+
+ m_simulation_ubo = UniformBuffer::create(sizeof(int) * 2 + sizeof(float) * 2, 4);
auto result = quad_vao();
m_quad_vao = result.first;
@@ -97,6 +99,7 @@ namespace Donut
upload_camera_ubo(cam);
upload_disk_ubo();
upload_objects_ubo(m_objects);
+ upload_simulation_ubo();
m_texture->bind_as_image(0, false);
uint32_t groups_x = static_cast<uint32_t>(std::ceil(cw / 16.0f));
@@ -173,6 +176,25 @@ namespace Donut
m_disk_ubo->bind(2);
}
+ void Engine::upload_simulation_ubo()
+ {
+ struct UBOData
+ {
+ int max_steps_moving;
+ int max_steps_static;
+ float early_exit_distance;
+ int padding;
+ } data;
+
+ data.max_steps_moving = m_max_steps_moving;
+ data.max_steps_static = m_max_steps_static;
+ data.early_exit_distance = m_early_exit_distance;
+ data.padding = 0;
+
+ m_simulation_ubo->set_data(&data, sizeof(data));
+ m_simulation_ubo->bind(4);
+ }
+
void Engine::update_physics(float delta_time)
{
for (auto& obj : m_objects)