hachem.wtf
aboutsummaryrefslogtreecommitdiff
path: root/src/rendering/scene_renderer.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/rendering/scene_renderer.h')
-rw-r--r--src/rendering/scene_renderer.h48
1 files changed, 48 insertions, 0 deletions
diff --git a/src/rendering/scene_renderer.h b/src/rendering/scene_renderer.h
new file mode 100644
index 0000000..1f16afc
--- /dev/null
+++ b/src/rendering/scene_renderer.h
@@ -0,0 +1,48 @@
+#pragma once
+
+#include "rhi.h"
+#include "renderer_backend.h"
+#include <glm/glm.hpp>
+#include <vector>
+
+namespace Donut
+{
+ struct CameraView
+ {
+ glm::mat4 view;
+ glm::mat4 projection;
+ glm::vec3 position;
+ int fb_width = 1;
+ int fb_height = 1;
+ };
+
+ class SceneRenderer
+ {
+ public:
+ auto init(RHI::Device& device) -> bool;
+
+ auto render(RHI::CommandList& cmd, const CameraView& cam,
+ const std::vector<SceneObject>& objects, int selected,
+ RHI::Texture* cubemap) -> void;
+
+ private:
+ static constexpr int MAX_OBJECTS = 64;
+
+ RHI::Device* m_device = nullptr;
+
+ Ref<RHI::Pipeline> m_grid_pipeline;
+ Ref<RHI::Buffer> m_grid_vb;
+ Ref<RHI::Buffer> m_grid_ubo;
+ int m_grid_vertex_count = 0;
+
+ Ref<RHI::Pipeline> m_sphere_pipeline;
+ Ref<RHI::Buffer> m_sphere_vb;
+ Ref<RHI::Buffer> m_sphere_ib;
+ int m_sphere_index_count = 0;
+ std::vector<Ref<RHI::Buffer>> m_sphere_ubos;
+
+ Ref<RHI::Pipeline> m_skybox_pipeline;
+ Ref<RHI::Buffer> m_skybox_vb;
+ Ref<RHI::Buffer> m_skybox_ubo;
+ };
+}