sculpto
gl_shader.h
Go to the documentation of this file.
1/*!****************************************************************//*!*
2 * \file gl_shader.h
3 * \brief OpenGL shader program class definition module.
4 *
5 * \author Sabitov Kirill
6 * \date 27 June 2022
7 *********************************************************************/
8
9#pragma once
10
12#include "gl.h"
13
14namespace scl
15{
18 {
19 private:
20 GLuint Id {};
21 mutable std::unordered_map<std::string, int> VariablesLocations {};
22 mutable bool ShaderNotBindedErrorAlreadyShown {};
23 static int CurrentlyBoundShaderId;
24
25 private:
26 /*!*
27 * Get OpenGL shader type function.
28 *
29 * \param Type - shader type.
30 * \return OpenGL shader type.
31 */
32 constexpr static GLenum GetGLShaderType(shader_type Type);
33
34 /*!*
35 * Compile shader_props from source code function.
36 *
37 * \param Source - shader_props source
38 * \param ShaderId shader_props OpenGL id.
39 * \return success flag.
40 */
41 bool CompileShader(const shader_props &Shader, GLuint &ShaderId);
42
43 /*!*
44 * Compile all shaders and create shader_props program function.
45 *
46 * \param Shaders - array of shaders id's to attach to shader_props program.
47 * \return success flag.
48 */
49 bool CompileProgram(const std::vector<GLuint> &Shaders);
50
51 /*!*
52 * Create shader_props program from shaders data arary, stored in base shader_props class.
53 *
54 * \param Shaders - shaders array.
55 * \return success flag.
56 */
57 bool Create(const std::vector<shader_props> &Shaders);
58
59 /*!*
60 * Get shader variable location from cache if ys exist or create it ande cache to memory function.
61 *
62 * \param Name - name of shader variable.
63 * \return shader variable location.
64 */
65 int GetOrCacheLocation(const std::string &Name) const;
66
67 /*!*
68 * Check if current shader is binded.
69 *
70 * \param None.
71 * \return None.
72 */
73 bool CheckIfShaderBinded() const;
74
75 public:
77 render_primitive::handle GetHandle() const override { return Id; }
78
79 /*!*
80 * Shader program default constructor.
81 *
82 * \param Shaders - shaders array.
83 * \param DubugName - shader program debug name.
84 */
85 gl_shader_program(const std::vector<shader_props> &Shaders, const std::string &DebugName);
86
89
90 /*!*
91 * Set uniform variable to shader_props function.
92 *
93 * \param Name - unifrom variable name.
94 * \param Value - unifrom variable name.
95 * \return success flag.
96 */
97
98 bool SetBool(const std::string &Name, bool Value) const override;
99 bool SetFloat(const std::string &Name, float Value) const override;
100 bool SetFloat2(const std::string &Name, const vec2 &Value) const override;
101 bool SetFloat3(const std::string &Name, const vec3 &Value) const override;
102 bool SetFloat4(const std::string &Name, const vec4 &Value) const override;
103 bool SetInt(const std::string &Name, int Value) const override;
104 bool SetInt2(const std::string &Name, const ivec2 &Value) const override;
105 bool SetInt3(const std::string &Name, const ivec3 &Value) const override;
106 bool SetInt4(const std::string &Name, const ivec4 &Value) const override;
107 bool SetUInt(const std::string &Name, u32 Value) const override;
108 bool SetUInt2(const std::string &Name, const uvec2 &Value) const override;
109 bool SetUInt3(const std::string &Name, const uvec3 &Value) const override;
110 bool SetUInt4(const std::string &Name, const uvec4 &Value) const override;
111 bool SetMatr3(const std::string &Name, const matr3 &Value) const override;
112 bool SetMatr4(const std::string &Name, const matr4 &Value) const override;
113
114 bool SetBool(int Location, bool Value) const override;
115 bool SetFloat(int Location, float Value) const;
116 bool SetFloat2(int Location, const vec2 &Value) const;
117 bool SetFloat3(int Location, const vec3 &Value) const;
118 bool SetFloat4(int Location, const vec4 &Value) const;
119 bool SetInt(int Location, int Value) const;
120 bool SetInt2(int Location, const ivec2 &Value) const;
121 bool SetInt3(int Location, const ivec3 &Value) const;
122 bool SetInt4(int Location, const ivec4 &Value) const;
123 bool SetUInt(int Location, u32 Value) const;
124 bool SetUInt2(int Location, const uvec2 &Value) const;
125 bool SetUInt3(int Location, const uvec3 &Value) const;
126 bool SetUInt4(int Location, const uvec4 &Value) const;
127 bool SetMatr3(int Location, const matr3 &Value) const;
128 bool SetMatr4(int Location, const matr4 &Value) const;
129
130 /*!*
131 * Bind buffer to current render stage function.
132 *
133 * \param None.
134 * \return None.
135 */
136 void Bind() const override;
137
138 /*!*
139 * Unbind buffer from current render stage function.
140 *
141 * \param None.
142 * \return None.
143 */
144 void Unbind() const override;
145
146 /*!*
147 * Update (recompile from dource file).
148 *
149 */
150 void Update(const std::vector<shader_props> &Shaders) override;
151
152 /*!*
153 * Unload shader_props program from GPU memory function.
154 *
155 * \param None.
156 * \return None.
157 */
158 void Free() override;
159 };
160}
bool SetInt(const std::string &Name, int Value) const override
Definition: gl_shader.cpp:233
void Bind() const override
Definition: gl_shader.cpp:140
bool SetInt3(const std::string &Name, const ivec3 &Value) const override
Definition: gl_shader.cpp:253
bool SetInt4(const std::string &Name, const ivec4 &Value) const override
Definition: gl_shader.cpp:263
gl_shader_program(const std::vector< shader_props > &Shaders, const std::string &DebugName)
Definition: gl_shader.cpp:129
render_primitive::handle GetHandle() const override
Definition: gl_shader.h:77
bool SetBool(const std::string &Name, bool Value) const override
Definition: gl_shader.cpp:183
bool SetUInt2(const std::string &Name, const uvec2 &Value) const override
Definition: gl_shader.cpp:283
void Unbind() const override
Definition: gl_shader.cpp:149
bool SetFloat4(const std::string &Name, const vec4 &Value) const override
Definition: gl_shader.cpp:223
bool SetUInt3(const std::string &Name, const uvec3 &Value) const override
Definition: gl_shader.cpp:293
bool SetMatr4(const std::string &Name, const matr4 &Value) const override
Definition: gl_shader.cpp:323
void Update(const std::vector< shader_props > &Shaders) override
Definition: gl_shader.cpp:155
bool SetMatr3(const std::string &Name, const matr3 &Value) const override
Definition: gl_shader.cpp:313
void Free() override
Definition: gl_shader.cpp:162
bool SetFloat(const std::string &Name, float Value) const override
Definition: gl_shader.cpp:193
bool SetFloat3(const std::string &Name, const vec3 &Value) const override
Definition: gl_shader.cpp:213
bool SetFloat2(const std::string &Name, const vec2 &Value) const override
Definition: gl_shader.cpp:203
bool SetUInt4(const std::string &Name, const uvec4 &Value) const override
Definition: gl_shader.cpp:303
bool SetInt2(const std::string &Name, const ivec2 &Value) const override
Definition: gl_shader.cpp:243
bool SetUInt(const std::string &Name, u32 Value) const override
Definition: gl_shader.cpp:273
std::string DebugName
Definition: shader.h:50
Definition: base.h:33
uint32_t u32
Definition: math_common.h:21
shader_type
Definition: shader.h:17
Shader program interface definition module.