diff options
Diffstat (limited to 'src/GFX/Shading')
| -rw-r--r-- | src/GFX/Shading/Program.cpp | 9 | ||||
| -rw-r--r-- | src/GFX/Shading/Program.hpp | 4 | ||||
| -rw-r--r-- | src/GFX/Shading/Shader.hpp | 8 |
3 files changed, 10 insertions, 11 deletions
diff --git a/src/GFX/Shading/Program.cpp b/src/GFX/Shading/Program.cpp index ff10012..fe5d576 100644 --- a/src/GFX/Shading/Program.cpp +++ b/src/GFX/Shading/Program.cpp @@ -2,6 +2,8 @@ #include <stdexcept> #include "Program.hpp" +#include "../../Common/Assert.hpp" + namespace MC::GFX::Shading { Program::Program(Shader vertex, Shader fragment) { @@ -26,6 +28,7 @@ Program::Program(Shader vertex, Shader fragment) { } void Program::bind() const { + ASSERT(m_program != 0, "Program is not initialized"); glUseProgram(m_program); } @@ -33,10 +36,12 @@ void Program::unbind() const { glUseProgram(0); } -Uniform Program::uniform(const std::string& name) const { +std::optional<Uniform> Program::uniform(const std::string& name) const { + ASSERT(m_program != 0, "Program is not initialized"); auto index = glGetUniformLocation(m_program, name.c_str()); - return {name, static_cast<U32>(index)}; + if (index == -1) return {}; + return {{name, static_cast<U32>(index)}}; } U32 Program::get() const { diff --git a/src/GFX/Shading/Program.hpp b/src/GFX/Shading/Program.hpp index 2f48698..67838dc 100644 --- a/src/GFX/Shading/Program.hpp +++ b/src/GFX/Shading/Program.hpp @@ -1,5 +1,6 @@ #pragma once +#include <optional> #include <string> #include "Shader.hpp" #include "Uniform.hpp" @@ -8,11 +9,12 @@ namespace MC::GFX::Shading { class Program { public: + Program() : m_program(0) {} Program(Shader vertex, Shader fragment); U32 get() const; - Uniform uniform(const std::string& name) const; + std::optional<Uniform> uniform(std::string const& name) const; void bind() const; void unbind() const; diff --git a/src/GFX/Shading/Shader.hpp b/src/GFX/Shading/Shader.hpp index 21fd899..8c6c5c8 100644 --- a/src/GFX/Shading/Shader.hpp +++ b/src/GFX/Shading/Shader.hpp @@ -19,14 +19,6 @@ public: return m_shader; } - static Shader create_vertex() { - return {Type::Vertex, Assets::Shaders::vertex}; - } - - static Shader create_fragment() { - return {Type::Fragment, Assets::Shaders::fragment}; - } - private: U32 m_shader; }; |
