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/Shader.cpp | 66 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 src/Rendering/Shader.cpp (limited to 'src/Rendering/Shader.cpp') diff --git a/src/Rendering/Shader.cpp b/src/Rendering/Shader.cpp new file mode 100644 index 0000000..b055fe4 --- /dev/null +++ b/src/Rendering/Shader.cpp @@ -0,0 +1,66 @@ +#include "Shader.h" +#include "Renderer.h" +#include "Platform/OpenGL/OpenGLShader.h" +#include + +namespace Donut +{ + Shader* Shader::Create(const std::string& filepath) + { + switch (Renderer::GetAPI()) + { + case RendererAPI::API::OpenGL: + return new OpenGLShader(filepath); + default: + return nullptr; + } + } + + Shader* Shader::Create(const std::string& name, const std::string& vertexSrc, const std::string& fragmentSrc) + { + switch (Renderer::GetAPI()) + { + case RendererAPI::API::OpenGL: + return new OpenGLShader(name, vertexSrc, fragmentSrc); + default: + return nullptr; + } + } + + void ShaderLibrary::Add(const std::shared_ptr& shader) + { + auto& name = shader->GetName(); + Add(name, shader); + } + + void ShaderLibrary::Add(const std::string& name, const std::shared_ptr& shader) + { + m_Shaders[name] = shader; + } + + std::shared_ptr ShaderLibrary::Load(const std::string& filepath) + { + auto shader = std::shared_ptr(Shader::Create(filepath)); + Add(shader); + return shader; + } + + std::shared_ptr ShaderLibrary::Load(const std::string& name, const std::string& filepath) + { + auto shader = std::shared_ptr(Shader::Create(filepath)); + Add(name, shader); + return shader; + } + + std::shared_ptr ShaderLibrary::Get(const std::string& name) + { + if (Exists(name)) + return m_Shaders[name]; + return nullptr; + } + + bool ShaderLibrary::Exists(const std::string& name) const + { + return m_Shaders.find(name) != m_Shaders.end(); + } +}; -- cgit v1.3