#include #include #include "Program.hpp" namespace MC::GFX::Shading { Program::Program(Shader vertex, Shader fragment) { m_program = glCreateProgram(); glAttachShader(m_program, fragment.get()); glAttachShader(m_program, vertex.get()); glLinkProgram(m_program); glDeleteShader(fragment.get()); glDeleteShader(vertex.get()); GLint success; glGetProgramiv(m_program, GL_LINK_STATUS, &success); if(!success) { char message[512] = {}; glGetProgramInfoLog(m_program, 512, nullptr, message); throw std::runtime_error(message); } } void Program::bind() const { glUseProgram(m_program); } void Program::unbind() const { glUseProgram(0); } Uniform Program::uniform(const std::string& name) const { auto index = glGetUniformLocation(m_program, name.c_str()); return {name, static_cast(index)}; } uint32_t Program::get() const { return m_program; } }