My Project
Loading...
Searching...
No Matches
shaders.hh
Go to the documentation of this file.
1#pragma once
2#include <string>
3#include <unordered_map>
4#include "glm/glm.hpp"
5#include "lights.hh"
6
8{
9 std::string VertexSource;
10 std::string FragmentSource;
11};
12
13class Shader
14{
15 // a Shader class does:
16 // - load source code and compile a shader
17 // - bind
18 // - unbind
19 // - set uniforms to a shader
20private:
21 std::string source_filepath;
22 unsigned int shader_id;
23 std::unordered_map<std::string, int> uniform_location_cache;
24 // caching for uniforms
25
26 unsigned int compile_shader(unsigned int type_shader, const std::string &source);
27
28public:
29 explicit Shader(const std::string &filepath);
30 ~Shader();
31
32 void bind() const;
33 void unbind() const;
34 ShaderSourceCode parse_source(const std::string &filepath);
35 unsigned int create_sharder(const std::string &vertex_shader, const std::string &fragments_shader);
36
37 void set_uniform_int1(const std::string &name, int value);
38 void set_uniform_float1(const std::string &name, float v0);
39 void set_uniform_float3(const std::string &name, float v0, float v1, float v2);
40 void set_uniform_float4(const std::string &name, float v0, float v1, float v2, float v3);
41 void set_uniform_mat4(const std::string &name, glm::mat4 &matrix);
42 void set_uniform_vec3(const std::string &name, glm::vec3 &vec);
43
44 void set_MVP(glm::mat4 &model, glm::mat4 &view, glm::mat4 &projection);
45 void set_point_light(PointLight &point_light);
47
48 // TODO update to auto load from the source code and set automatic the uniforms
49 int get_uniform_location(const std::string &name);
50};
51
53{
54private:
56 void set_MVP(glm::mat4 &model, glm::mat4 &view, glm::mat4 &projection);
57 void set_point_light(PointLight &point_light);
58 void set_directional_light(DirLight &dir_light);
59
60public:
61 ShaderUniform(Shader& shader);
63
64 void setup_uniforms(glm::mat4 &model, glm::mat4 &view, glm::mat4 &projection,
65 PointLight &point_light, DirLight *dir_light);
66};
Definition shaders.hh:53
void set_MVP(glm::mat4 &model, glm::mat4 &view, glm::mat4 &projection)
Definition shaders.cpp:180
void set_directional_light(DirLight &dir_light)
Definition shaders.cpp:201
Shader & _shader
Definition shaders.hh:55
void setup_uniforms(glm::mat4 &model, glm::mat4 &view, glm::mat4 &projection, PointLight &point_light, DirLight *dir_light)
Definition shaders.cpp:171
~ShaderUniform()
Definition shaders.cpp:167
void set_point_light(PointLight &point_light)
Definition shaders.cpp:189
Definition shaders.hh:14
unsigned int compile_shader(unsigned int type_shader, const std::string &source)
Definition shaders.cpp:118
void set_uniform_mat4(const std::string &name, glm::mat4 &matrix)
Definition shaders.cpp:61
unsigned int shader_id
Definition shaders.hh:22
void set_directional_light(DirLight &dir_light)
void set_uniform_float1(const std::string &name, float v0)
Definition shaders.cpp:37
ShaderSourceCode parse_source(const std::string &filepath)
Definition shaders.cpp:81
void set_point_light(PointLight &point_light)
void set_uniform_float3(const std::string &name, float v0, float v1, float v2)
Definition shaders.cpp:43
void unbind() const
Definition shaders.cpp:25
void set_uniform_float4(const std::string &name, float v0, float v1, float v2, float v3)
Definition shaders.cpp:49
void bind() const
Definition shaders.cpp:20
std::string source_filepath
Definition shaders.hh:21
void set_uniform_int1(const std::string &name, int value)
Definition shaders.cpp:31
void set_uniform_vec3(const std::string &name, glm::vec3 &vec)
Definition shaders.cpp:55
std::unordered_map< std::string, int > uniform_location_cache
Definition shaders.hh:23
int get_uniform_location(const std::string &name)
Definition shaders.cpp:67
void set_MVP(glm::mat4 &model, glm::mat4 &view, glm::mat4 &projection)
unsigned int create_sharder(const std::string &vertex_shader, const std::string &fragments_shader)
Definition shaders.cpp:145
~Shader()
Definition shaders.cpp:17
Definition lights.hh:31
Definition lights.hh:9
Definition shaders.hh:8
std::string VertexSource
Definition shaders.hh:9
std::string FragmentSource
Definition shaders.hh:10