diff options
| author | hachem <im@hachem.wtf> | 2025-08-12 18:12:37 +0200 |
|---|---|---|
| committer | hachem <im@hachem.wtf> | 2025-08-12 18:12:37 +0200 |
| commit | a2ec7dabd48a70ea69623406ddd0f8f97af403c8 (patch) | |
| tree | 52d71b51753b88473607f5e97f8bc15bdb5ad7d3 /src/Rendering/Shader.cpp | |
| parent | 16dff443789c7f1461b46ce52966972ae14c042b (diff) | |
[add]: Start of a basic rendering backend
Diffstat (limited to 'src/Rendering/Shader.cpp')
| -rw-r--r-- | src/Rendering/Shader.cpp | 66 |
1 files changed, 66 insertions, 0 deletions
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 <memory> + +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>& shader) + { + auto& name = shader->GetName(); + Add(name, shader); + } + + void ShaderLibrary::Add(const std::string& name, const std::shared_ptr<Shader>& shader) + { + m_Shaders[name] = shader; + } + + std::shared_ptr<Shader> ShaderLibrary::Load(const std::string& filepath) + { + auto shader = std::shared_ptr<Shader>(Shader::Create(filepath)); + Add(shader); + return shader; + } + + std::shared_ptr<Shader> ShaderLibrary::Load(const std::string& name, const std::string& filepath) + { + auto shader = std::shared_ptr<Shader>(Shader::Create(filepath)); + Add(name, shader); + return shader; + } + + std::shared_ptr<Shader> 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(); + } +}; |
