#include "renderer.h" #include "platform/opengl/opengl_renderer_api.h" #include "platform/vulkan/vulkan_renderer_api.h" #include namespace Donut { Scope RendererAPI::create() { switch (s_api) { case API::OpenGL: return create_scope(); case API::Vulkan: return create_scope(); default: return nullptr; } } RendererAPI::API RendererAPI::s_api = RendererAPI::API::OpenGL; void Renderer::init() { RenderCommand::init(); RenderCommand::enable_depth_test(); } void Renderer::shutdown() { } void Renderer::on_window_resize(uint32_t width, uint32_t height) { RenderCommand::set_viewport(0, 0, width, height); } void Renderer::submit(const Ref& shader, const Ref& vertex_array, const glm::mat4& transform, const glm::mat4& view_projection) { shader->bind(); shader->set_mat4("u_ViewProjection", view_projection); 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(); } };