From 3fd33ecff7472e4d6fc9e6b3905f56982e497ef2 Mon Sep 17 00:00:00 2001 From: hachem Date: Sun, 23 Aug 2026 17:21:37 +0200 Subject: [feat]: complete RHI api --- src/rendering/scene_renderer.h | 56 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 src/rendering/scene_renderer.h (limited to 'src/rendering/scene_renderer.h') diff --git a/src/rendering/scene_renderer.h b/src/rendering/scene_renderer.h new file mode 100644 index 0000000..eafd56e --- /dev/null +++ b/src/rendering/scene_renderer.h @@ -0,0 +1,56 @@ +#pragma once + +#include "rhi.h" +#include "renderer_backend.h" // SceneObject +#include +#include + +namespace Donut +{ + // The world-builder scene view (skybox + lit spheres + reference grid), + // written ONCE against the RHI so it renders identically on every backend. + // The Application owns the camera, the object list and the HDRI cubemap and + // passes them in each frame; this class owns only the GPU resources (meshes, + // pipelines, per-object uniform buffers) and records the draws. + struct CameraView + { + glm::mat4 view; + glm::mat4 projection; + glm::vec3 position; + int fb_width = 1; + int fb_height = 1; + }; + + class SceneRenderer + { + public: + // Builds the grid/sphere/skybox meshes and pipelines on the given device. + auto init(RHI::Device& device) -> bool; + + // Records the scene into the currently-open swapchain render pass. `cubemap` + // is the shared HDRI environment (sphere ambient + skybox background). + auto render(RHI::CommandList& cmd, const CameraView& cam, + const std::vector& objects, int selected, + RHI::Texture* cubemap) -> void; + + private: + static constexpr int MAX_OBJECTS = 64; + + RHI::Device* m_device = nullptr; + + Ref m_grid_pipeline; + Ref m_grid_vb; + Ref m_grid_ubo; + int m_grid_vertex_count = 0; + + Ref m_sphere_pipeline; + Ref m_sphere_vb; + Ref m_sphere_ib; + int m_sphere_index_count = 0; + std::vector> m_sphere_ubos; // one per object slot + + Ref m_skybox_pipeline; + Ref m_skybox_vb; + Ref m_skybox_ubo; + }; +} -- cgit v1.3