hachem.wtf
aboutsummaryrefslogtreecommitdiff
path: root/src/rendering/black_hole_renderer.cpp
diff options
context:
space:
mode:
authorhachem <im@hachem.wtf>2026-08-23 22:39:47 +0200
committerhachem <im@hachem.wtf>2026-08-23 22:39:47 +0200
commit4a72c63f74bc055c29f397f54fca8e9613f4474d (patch)
tree5b6f96f22a67f4e303ae72b6e9763d25a6dadd16 /src/rendering/black_hole_renderer.cpp
parent6ee03a2ea3c764f0364b2e61beb6812226facd4c (diff)
feat: wire the scene into the simulation engine
Diffstat (limited to 'src/rendering/black_hole_renderer.cpp')
-rw-r--r--src/rendering/black_hole_renderer.cpp22
1 files changed, 18 insertions, 4 deletions
diff --git a/src/rendering/black_hole_renderer.cpp b/src/rendering/black_hole_renderer.cpp
index c7b58c5..55d0ff2 100644
--- a/src/rendering/black_hole_renderer.cpp
+++ b/src/rendering/black_hole_renderer.cpp
@@ -42,9 +42,6 @@ namespace Donut
m_sim_ubo = device.create_buffer(BufferType::Uniform, 16);
std::vector<uint8_t> obj(800, 0);
- int num_objects = 1; std::memcpy(obj.data() + 0, &num_objects, 4);
- float pos_radius[4] = { 0, 0, 0, SagA_rs }; std::memcpy(obj.data() + 16, pos_radius, 16);
- float color[4] = { 0, 0, 0, 1 }; std::memcpy(obj.data() + 272, color, 16);
m_obj_ubo->update(obj.data(), obj.size());
{
@@ -78,7 +75,8 @@ namespace Donut
}
auto BlackHoleRenderer::render_geodesic(RHI::CommandList& cmd, const GeodesicView& view,
- const BlackHoleParams& params, RHI::Texture* cubemap) -> void
+ const BlackHoleParams& params,
+ const std::vector<SceneObject>& objects, RHI::Texture* cubemap) -> void
{
CamUBO cam{};
cam.pos = view.position; cam.right = view.right; cam.up = view.up; cam.fwd = view.forward;
@@ -106,6 +104,22 @@ namespace Donut
};
m_disk_ubo->update(disk, sizeof(disk));
+ {
+ const float k = SagA_rs / SCENE_UNITS_PER_RS;
+ std::vector<uint8_t> objbuf(800, 0);
+ int n = std::min((int)objects.size(), 16);
+ std::memcpy(objbuf.data(), &n, 4);
+ for (int i = 0; i < n; ++i)
+ {
+ const SceneObject& o = objects[i];
+ float pr[4] = { o.position.x * k, o.position.y * k, o.position.z * k, o.radius * k };
+ float col[4] = { o.color.r, o.color.g, o.color.b, 1.0f };
+ std::memcpy(objbuf.data() + 16 + 16 * i, pr, 16);
+ std::memcpy(objbuf.data() + 272 + 16 * i, col, 16);
+ }
+ m_obj_ubo->update(objbuf.data(), objbuf.size());
+ }
+
RenderTarget* target = view.moving ? m_geo_lo.get() : m_geo_hi.get();
m_last_target = target;