#include "renderer.h" #include "platform/opengl/opengl_renderer_api.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_scene_data = new Renderer::SceneData; void Renderer::init() { RenderCommand::init(); } void Renderer::shutdown() { delete s_scene_data; } void Renderer::on_window_resize(uint32_t width, uint32_t height) { RenderCommand::set_viewport(0, 0, width, height); } void Renderer::begin_scene() { s_scene_data->ViewProjectionMatrix = glm::ortho(-1.0f, 1.0f, -1.0f, 1.0f, -1.0f, 1.0f); } void Renderer::end_scene() { } void Renderer::submit(const std::shared_ptr& shader, const std::shared_ptr& vertex_array, const glm::mat4& transform) { shader->bind(); shader->set_mat4("u_ViewProjection", s_scene_data->ViewProjectionMatrix); shader->set_mat4("u_Transform", transform); vertex_array->bind(); RenderCommand::draw_indexed(vertex_array); } Scope RenderCommand::s_renderer_api = RendererAPI::create(); void Renderer::set_clear_color(const glm::vec4& color) { RenderCommand::set_clear_color(color); } void Renderer::clear() { RenderCommand::clear(); } }