From 0ee2712029f53175552d459f908b163ad61de197 Mon Sep 17 00:00:00 2001 From: hachem Date: Sun, 23 Aug 2026 16:19:19 +0200 Subject: feat: RHI interface with shared scene and black hole renderers --- src/rendering/black_hole_renderer.h | 46 +++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 src/rendering/black_hole_renderer.h (limited to 'src/rendering/black_hole_renderer.h') diff --git a/src/rendering/black_hole_renderer.h b/src/rendering/black_hole_renderer.h new file mode 100644 index 0000000..563fa9b --- /dev/null +++ b/src/rendering/black_hole_renderer.h @@ -0,0 +1,46 @@ +#pragma once + +#include "rhi.h" +#include "renderer_backend.h" +#include + +namespace Donut +{ + struct GeodesicView + { + glm::vec3 position, right, up, forward; + float tan_half_fov = 1.0f; + float aspect = 16.0f / 9.0f; + bool moving = false; + float time = 0.0f; + }; + + class BlackHoleRenderer + { + public: + static constexpr int GEO_LO_W = 480, GEO_LO_H = 270; + static constexpr int GEO_HI_W = 960, GEO_HI_H = 540; + + auto init(RHI::Device& device) -> bool; + + auto render_geodesic(RHI::CommandList& cmd, const GeodesicView& view, + const BlackHoleParams& params, RHI::Texture* cubemap) -> void; + + auto blit(RHI::CommandList& cmd, int fb_width, int fb_height) -> void; + + private: + RHI::Device* m_device = nullptr; + + Ref m_geo_pipeline; + Ref m_geo_lo; + Ref m_geo_hi; + Ref m_quad_vb; + Ref m_cam_ubo; + Ref m_disk_ubo; + Ref m_obj_ubo; + Ref m_sim_ubo; + + Ref m_present_pipeline; + RHI::RenderTarget* m_last_target = nullptr; + }; +} -- cgit v1.3