lmgl 1.0.0
A lightweight OpenGL graphics engine library written in C++
Loading...
Searching...
No Matches
shader.hpp
Go to the documentation of this file.
1
13
14#pragma once
15
16#include <glm/glm.hpp>
17#include <memory>
18#include <string>
19#include <unordered_map>
20#include <vector>
21
22namespace lmgl {
23
24namespace renderer {
25
34class Shader {
35 public:
45 Shader(const std::string &vert, const std::string &frag);
46
54 Shader(const std::string &vert, const std::string &geom, const std::string &frag);
55
61 ~Shader();
62
73 static std::shared_ptr<Shader> from_vf_files(const std::string &vert, const std::string &frag);
74
83 static std::shared_ptr<Shader> from_vgf_files(const std::string &vert, const std::string &geom, const std::string &frag);
84
95 static std::shared_ptr<Shader> from_glsl_file(const std::string &glsl);
96
102 void bind() const;
103
109 void unbind() const;
110
116 unsigned int get_id() const;
117
124 void set_int(const std::string &name, int val);
125
133 void set_int_array(const std::string &name, int *vals, unsigned int count);
134
141 void set_float(const std::string &name, float val);
142
149 void set_vec2(const std::string &name, const glm::vec2 &val);
150
157 void set_vec3(const std::string &name, const glm::vec3 &val);
158
165 void set_vec4(const std::string &name, const glm::vec4 &val);
166
173 void set_mat3(const std::string &name, const glm::mat3 &val);
174
181 void set_mat4(const std::string &name, const glm::mat4 &val);
182
183 private:
185 unsigned int m_renderer_id;
186
188 mutable std::unordered_map<std::string, int> m_uniform_location_cache;
189
198 int get_uniform_location(const std::string &name) const;
199
210 unsigned int compile_shader(unsigned int type, const std::string &src);
211
223 unsigned int create_program(unsigned int vert, unsigned int frag);
224
233 unsigned int create_program(unsigned int vert, unsigned int geom, unsigned int frag);
234
243 static std::string read_file(const std::string &fpath);
244
254 static std::vector<std::string> parse_glsl_shader(const std::string &src);
255};
256
266 public:
275 static void add(const std::string &name, const std::shared_ptr<Shader> shader);
276
288 static std::shared_ptr<Shader> load_vf(const std::string &name, const std::string &vert, const std::string &frag);
289
300 static std::shared_ptr<Shader> load_glsl(const std::string &name, const std::string &src);
301
310 static std::shared_ptr<Shader> get(const std::string &name);
311
318 static bool exists(const std::string &name);
319
325 static void clear();
326
327 private:
329 static std::unordered_map<std::string, std::shared_ptr<Shader>> s_shaders;
330};
331
332} // namespace renderer
333
334} // namespace lmgl
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