From a2ec7dabd48a70ea69623406ddd0f8f97af403c8 Mon Sep 17 00:00:00 2001 From: hachem Date: Tue, 12 Aug 2025 18:12:37 +0200 Subject: [add]: Start of a basic rendering backend --- src/Rendering/Renderer.cpp | 63 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 src/Rendering/Renderer.cpp (limited to 'src/Rendering/Renderer.cpp') diff --git a/src/Rendering/Renderer.cpp b/src/Rendering/Renderer.cpp new file mode 100644 index 0000000..7b75a18 --- /dev/null +++ b/src/Rendering/Renderer.cpp @@ -0,0 +1,63 @@ +#include "Renderer.h" +#include "Platform/OpenGL/OpenGLRendererAPI.h" +#include +#include + +namespace Donut { + + Scope RendererAPI::Create() { + switch (s_API) { + case API::OpenGL: + return std::make_unique(); + default: + return nullptr; + } + } + + RendererAPI::API RendererAPI::s_API = RendererAPI::API::OpenGL; + + Renderer::SceneData* Renderer::s_SceneData = new Renderer::SceneData; + + void Renderer::Init() { + RenderCommand::Init(); + } + + void Renderer::Shutdown() { + delete s_SceneData; + } + + void Renderer::OnWindowResize(uint32_t width, uint32_t height) { + RenderCommand::SetViewport(0, 0, width, height); + } + + void Renderer::BeginScene() { + // Set up scene data + s_SceneData->ViewProjectionMatrix = glm::ortho(-1.0f, 1.0f, -1.0f, 1.0f, -1.0f, 1.0f); + } + + void Renderer::EndScene() { + // Clean up scene data + } + + void Renderer::Submit(const std::shared_ptr& shader, + const std::shared_ptr& vertexArray, + const glm::mat4& transform) { + shader->Bind(); + shader->SetMat4("u_ViewProjection", s_SceneData->ViewProjectionMatrix); + shader->SetMat4("u_Transform", transform); + + vertexArray->Bind(); + RenderCommand::DrawIndexed(vertexArray); + } + + Scope RenderCommand::s_RendererAPI = RendererAPI::Create(); + + void Renderer::SetClearColor(const glm::vec4& color) { + RenderCommand::SetClearColor(color); + } + + void Renderer::Clear() { + RenderCommand::Clear(); + } + +} -- cgit v1.3