19#include <unordered_map>
45 Shader(
const std::string &vert,
const std::string &frag);
54 Shader(
const std::string &vert,
const std::string &geom,
const std::string &frag);
73 static std::shared_ptr<Shader>
from_vf_files(
const std::string &vert,
const std::string &frag);
83 static std::shared_ptr<Shader>
from_vgf_files(
const std::string &vert,
const std::string &geom,
const std::string &frag);
95 static std::shared_ptr<Shader>
from_glsl_file(
const std::string &glsl);
116 unsigned int get_id()
const;
124 void set_int(
const std::string &name,
int val);
133 void set_int_array(
const std::string &name,
int *vals,
unsigned int count);
141 void set_float(
const std::string &name,
float val);
149 void set_vec2(
const std::string &name,
const glm::vec2 &val);
157 void set_vec3(
const std::string &name,
const glm::vec3 &val);
165 void set_vec4(
const std::string &name,
const glm::vec4 &val);
173 void set_mat3(
const std::string &name,
const glm::mat3 &val);
181 void set_mat4(
const std::string &name,
const glm::mat4 &val);
185 unsigned int m_renderer_id;
188 mutable std::unordered_map<std::string, int> m_uniform_location_cache;
198 int get_uniform_location(
const std::string &name)
const;
210 unsigned int compile_shader(
unsigned int type,
const std::string &src);
223 unsigned int create_program(
unsigned int vert,
unsigned int frag);
233 unsigned int create_program(
unsigned int vert,
unsigned int geom,
unsigned int frag);
243 static std::string read_file(
const std::string &fpath);
254 static std::vector<std::string> parse_glsl_shader(
const std::string &src);
275 static void add(
const std::string &name,
const std::shared_ptr<Shader> shader);
288 static std::shared_ptr<Shader>
load_vf(
const std::string &name,
const std::string &vert,
const std::string &frag);
300 static std::shared_ptr<Shader>
load_glsl(
const std::string &name,
const std::string &src);
310 static std::shared_ptr<Shader>
get(
const std::string &name);
318 static bool exists(
const std::string &name);
329 static std::unordered_map<std::string, std::shared_ptr<Shader>> s_shaders;
Manages a collection of shader programs.
Definition shader.hpp:265
static std::shared_ptr< Shader > load_glsl(const std::string &name, const std::string &src)
Loads a shader program from a GLSL source string and adds it to the library.
Definition shader.cpp:243
static std::shared_ptr< Shader > get(const std::string &name)
Retrieve a shader program from the library by name.
Definition shader.cpp:249
static void clear()
Clears all shader programs from the library.
Definition shader.cpp:259
static void add(const std::string &name, const std::shared_ptr< Shader > shader)
Adds a shader program to the library.
Definition shader.cpp:225
static std::shared_ptr< Shader > load_vf(const std::string &name, const std::string &vert, const std::string &frag)
Loads a shader program from vertex and fragment shader files and adds it to the library.
Definition shader.cpp:236
static bool exists(const std::string &name)
Checks if a shader program exists in the library by name.
Definition shader.cpp:257
void set_vec2(const std::string &name, const glm::vec2 &val)
Sets a vec2 uniform variable in the shader program.
Definition shader.cpp:73
void bind() const
Binds the shader program for use in rendering.
Definition shader.cpp:59
void set_int(const std::string &name, int val)
Sets an integer uniform variable in the shader program.
Definition shader.cpp:65
void unbind() const
Unbinds the shader program.
Definition shader.cpp:61
void set_vec3(const std::string &name, const glm::vec3 &val)
Sets a vec3 uniform variable in the shader program.
Definition shader.cpp:77
void set_mat3(const std::string &name, const glm::mat3 &val)
Sets a mat3 uniform variable in the shader program.
Definition shader.cpp:85
void set_float(const std::string &name, float val)
Sets a float uniform variable in the shader program.
Definition shader.cpp:71
static std::shared_ptr< Shader > from_vgf_files(const std::string &vert, const std::string &geom, const std::string &frag)
Creates a Shader instance from vertex, geometry, and fragment shader files.
Definition shader.cpp:40
void set_vec4(const std::string &name, const glm::vec4 &val)
Sets a vec4 uniform variable in the shader program.
Definition shader.cpp:81
~Shader()
Destructor for the Shader class.
Definition shader.cpp:32
void set_int_array(const std::string &name, int *vals, unsigned int count)
Sets an array of integer uniform variables in the shader program.
Definition shader.cpp:67
unsigned int get_id() const
Retrieves the unique identifier of the shader program.
Definition shader.cpp:63
void set_mat4(const std::string &name, const glm::mat4 &val)
Sets a mat4 uniform variable in the shader program.
Definition shader.cpp:89
Shader(const std::string &vert, const std::string &frag)
Creates a shader program from vertex and fragment shader source code.
Definition shader.cpp:19
static std::shared_ptr< Shader > from_vf_files(const std::string &vert, const std::string &frag)
Creates a Shader instance from vertex and fragment shader files.
Definition shader.cpp:34
static std::shared_ptr< Shader > from_glsl_file(const std::string &glsl)
Creates a Shader instance from a single GLSL file.
Definition shader.cpp:47
Namespace for rendering-related classes and functions.
Definition buffer.cpp:9
Forward declarations for Assimp Material structure.
Definition model_loader.cpp:12