diff options
Diffstat (limited to 'src/rendering/black_hole_renderer.cpp')
| -rw-r--r-- | src/rendering/black_hole_renderer.cpp | 22 |
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; |
