8#ifndef GALAXY_GRAPHICS_GL_SHADER_HPP_
9#define GALAXY_GRAPHICS_GL_SHADER_HPP_
11#include <ankerl/unordered_dense.h>
12#include <entt/core/compressed_pair.hpp>
14#include <glm/gtc/type_ptr.hpp>
58 bool load(
const std::string& file)
noexcept;
69 bool load(
const std::string& vertex,
const std::string& frag)
noexcept;
79 bool parse(
const std::string& src)
noexcept;
90 bool parse(
const std::string& vertex,
const std::string& frag)
noexcept;
121 template<
typename... Uniforms>
122 void set_uniform(
const std::string& name,
const Uniforms&... args);
130 unsigned int id() const noexcept;
236 const std::string& name,
237 const unsigned int& a,
238 const unsigned int& b,
239 const unsigned int& c,
240 const unsigned int& d
295 inline void Shader::set_uniform<std::uint64_t>(
const std::string& name,
const std::uint64_t& a)
301 inline void Shader::set_uniform<glm::mat3>(
const std::string& name,
const glm::mat3& a)
307 inline void Shader::set_uniform<glm::mat4>(
const std::string& name,
const glm::mat4& a)
313 inline void Shader::set_uniform<glm::vec2>(
const std::string& name,
const glm::vec2& a)
319 inline void Shader::set_uniform<glm::vec3>(
const std::string& name,
const glm::vec3& a)
325 inline void Shader::set_uniform<glm::vec4>(
const std::string& name,
const glm::vec4& a)
339 auto vec4 = glm::vec4();
#define GALAXY_LOG(level, msg,...)
Represents an RGBA colour.
void g(const std::uint8_t g) noexcept
Green.
void a(const std::uint8_t a) noexcept
Alpha.
void r(const std::uint8_t r) noexcept
Red.
void b(const std::uint8_t b) noexcept
Blue.
static const constexpr std::uint8_t OFFSET
Colour offsets for normalization.
entt::compressed_pair< std::string, std::string > m_src
Shader source code.
Shader() noexcept
Constructor.
ankerl::unordered_dense::map< std::string, int > m_cache
Cache of uniforms for better performance.
unsigned int id() const noexcept
Get program id.
int get_uniform_location(const std::string &name)
Retrieves the location of a shader uniform.
~Shader() noexcept
Destructor.
void compile()
Compiles shader into GPU mem.
void unbind() const
Unbind.
Shader & operator=(Shader &&) noexcept
Move assignment operator.
void set_uniform(const std::string &name, const Uniforms &... args)
Specialized variadic template for setting shader uniforms.
bool preprocess(const std::string &src) noexcept
Extract source code from a combined shader.
bool parse(const std::string &src) noexcept
Loads a combined raw shader.
bool load(const std::string &file) noexcept
Loads a combined shader.
void bind() const
Make active shader.
void destroy()
Destroys shader program.
unsigned int m_id
OpenGL handle.
float constexpr normalize(const Arithmetic val, const Arithmetic max) noexcept
Calc normalized value from range.