8#ifndef GALAXY_GRAPHICS_SHADER_HPP_
9#define GALAXY_GRAPHICS_SHADER_HPP_
11#include <ankerl/unordered_dense.h>
54 bool load(
const std::string& file)
noexcept;
65 bool load(
const std::string& vertex,
const std::string& frag)
noexcept;
75 bool parse(
const std::string& src)
noexcept;
86 bool parse(
const std::string& vertex,
const std::string& frag)
noexcept;
97 template<
typename... Uniforms>
98 void set_uniform(
const std::string& name,
const Uniforms&... args);
130 ankerl::unordered_dense::map<std::string, int>
m_cache;
166 ray::SetShaderValue(m_shader, get_uniform_location(name), &a, ray::SHADER_UNIFORM_VEC2);
172 ray::SetShaderValue(m_shader, get_uniform_location(name), &a, ray::SHADER_UNIFORM_VEC3);
178 ray::SetShaderValue(m_shader, get_uniform_location(name), &a, ray::SHADER_UNIFORM_VEC4);
184 ray::SetShaderValueMatrix(m_shader, get_uniform_location(name), a);
190 ray::SetShaderValueTexture(m_shader, get_uniform_location(name), a);
#define GALAXY_LOG(level, msg,...)
Shader() noexcept
Constructor.
Shader(const Shader &)=delete
Copy constructor.
ankerl::unordered_dense::map< std::string, int > m_cache
Cache of uniforms for better performance.
int get_uniform_location(const std::string &name)
Retrieves the location of a shader uniform.
~Shader() noexcept
Destructor.
Shader & operator=(const Shader &)=delete
Copy assignment operator.
Shader & operator=(Shader &&) noexcept
Move assignment operator.
void set_uniform(const std::string &name, const Uniforms &... args)
Specialized variadic template for setting shader uniforms.
ray::Shader m_shader
Handle.
bool parse(const std::string &src) noexcept
Loads a combined raw shader.
bool load(const std::string &file) noexcept
Loads a combined shader.