diff options
Diffstat (limited to 'src/rendering/scene_renderer.h')
| -rw-r--r-- | src/rendering/scene_renderer.h | 48 |
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; + }; +} |
