sculpto
shader.h
Go to the documentation of this file.
1/*!****************************************************************//*!*
2 * \file shader.h
3 * \brief Shader program interface definition module.
4 *
5 * \author Sabitov Kirill
6 * \date 27 June 2022
7 *********************************************************************/
8
9#pragma once
10
11#include "render_primitive.h"
12
13namespace scl
14{
16 enum class shader_type
17 {
18 VERTEX,
20 PIXEL,
21 COMPUTE,
22 };
23
26 {
28 std::string Source {};
29
31 shader_props() = default;
32
33 /*!*
34 * Shader constructor by source code.
35 *
36 * \param Type - shader_props type.
37 * \param Source - shader_props source code.
38 */
40 };
41
43 class shader_program: public render_primitive
44 {
45 public:
46 std::string SingleSourceFileName {};
50 std::string DebugName {};
51
52 public:
53 /*!*
54 * Set uniform variable to shader_props function.
55 *
56 * \param Name - unifrom variable name.
57 * \param Value - unifrom variable name.
58 * \return success flag.
59 */
60
61 virtual bool SetBool(const std::string &Name, bool Value) const = 0;
62 virtual bool SetFloat(const std::string &Name, float Value) const = 0;
63 virtual bool SetFloat2(const std::string &Name, const vec2 &Value) const = 0;
64 virtual bool SetFloat3(const std::string &Name, const vec3 &Value) const = 0;
65 virtual bool SetFloat4(const std::string &Name, const vec4 &Value) const = 0;
66 virtual bool SetInt(const std::string &Name, int Value) const = 0;
67 virtual bool SetInt2(const std::string &Name, const ivec2 &Value) const = 0;
68 virtual bool SetInt3(const std::string &Name, const ivec3 &Value) const = 0;
69 virtual bool SetInt4(const std::string &Name, const ivec4 &Value) const = 0;
70 virtual bool SetUInt(const std::string &Name, u32 Value) const = 0;
71 virtual bool SetUInt2(const std::string &Name, const uvec2 &Value) const = 0;
72 virtual bool SetUInt3(const std::string &Name, const uvec3 &Value) const = 0;
73 virtual bool SetUInt4(const std::string &Name, const uvec4 &Value) const = 0;
74 virtual bool SetMatr3(const std::string &Name, const matr3 &Value) const = 0;
75 virtual bool SetMatr4(const std::string &Name, const matr4 &Value) const = 0;
76
77 /*!*
78 * Set uniform variable to shader_props function.
79 *
80 * \param Location - platform specific shader variable location identifier.
81 * \param Value - unifrom variable value.
82 * \return success flag.
83 */
84
85 virtual bool SetBool(int Location, bool Value) const = 0;
86 virtual bool SetFloat (int Location, float Value) const = 0;
87 virtual bool SetFloat2(int Location, const vec2 &Value) const = 0;
88 virtual bool SetFloat3(int Location, const vec3 &Value) const = 0;
89 virtual bool SetFloat4(int Location, const vec4 &Value) const = 0;
90 virtual bool SetInt(int Location, int Value) const = 0;
91 virtual bool SetInt2(int Location, const ivec2 &Value) const = 0;
92 virtual bool SetInt3(int Location, const ivec3 &Value) const = 0;
93 virtual bool SetInt4(int Location, const ivec4 &Value) const = 0;
94 virtual bool SetUInt(int Location, u32 Value) const = 0;
95 virtual bool SetUInt2(int Location, const uvec2 &Value) const = 0;
96 virtual bool SetUInt3(int Location, const uvec3 &Value) const = 0;
97 virtual bool SetUInt4(int Location, const uvec4 &Value) const = 0;
98 virtual bool SetMatr3(int Location, const matr3 &Value) const = 0;
99 virtual bool SetMatr4(int Location, const matr4 &Value) const = 0;
100
101 public:
103 shader_program(const std::string &DebugName);
104
106 virtual ~shader_program() = default;
107
108 /*!*
109 * Bind buffer to current render stage function.
110 *
111 * \param None.
112 * \return None.
113 */
114 virtual void Bind() const = 0;
115
116 /*!*
117 * Unbind buffer from current render stage function.
118 *
119 * \param None.
120 * \return None.
121 */
122 virtual void Unbind() const = 0;
123
124 /*!*
125 * Recompile shader program function.
126 *
127 * \param Shaders - shaders array.
128 * \return None.
129 */
130 virtual void Update(const std::vector<shader_props> &Shaders) = 0;
131
132 /*!*
133 * Unload shader program from GPU memory function.
134 *
135 * \param None.
136 * \return None.
137 */
138 virtual void Free() = 0;
139
140 /*!*
141 * Shader program creation function.
142 *
143 * \param Shaders - shaders array.
144 * \param DubugName - shader program debug name.
145 * \return Pointer to created shader_props program.
146 */
147 static shared<shader_program> Create(const std::vector<shader_props> &Shaders, const std::string &DebugName);
148 };
149}
virtual bool SetUInt4(const std::string &Name, const uvec4 &Value) const =0
static shared< shader_program > Create(const std::vector< shader_props > &Shaders, const std::string &DebugName)
Definition: shader.cpp:16
virtual bool SetUInt3(int Location, const uvec3 &Value) const =0
virtual bool SetMatr4(const std::string &Name, const matr4 &Value) const =0
virtual bool SetInt4(const std::string &Name, const ivec4 &Value) const =0
virtual bool SetInt2(int Location, const ivec2 &Value) const =0
virtual bool SetFloat3(const std::string &Name, const vec3 &Value) const =0
virtual void Unbind() const =0
virtual bool SetInt3(int Location, const ivec3 &Value) const =0
virtual bool SetMatr3(const std::string &Name, const matr3 &Value) const =0
virtual bool SetUInt3(const std::string &Name, const uvec3 &Value) const =0
virtual bool SetMatr4(int Location, const matr4 &Value) const =0
virtual bool SetFloat(const std::string &Name, float Value) const =0
virtual bool SetBool(const std::string &Name, bool Value) const =0
virtual bool SetUInt(const std::string &Name, u32 Value) const =0
virtual bool SetMatr3(int Location, const matr3 &Value) const =0
virtual void Update(const std::vector< shader_props > &Shaders)=0
virtual ~shader_program()=default
virtual bool SetUInt(int Location, u32 Value) const =0
virtual bool SetFloat3(int Location, const vec3 &Value) const =0
virtual bool SetInt2(const std::string &Name, const ivec2 &Value) const =0
std::string GeometryShadersourceFileName
Definition: shader.h:48
virtual bool SetUInt4(int Location, const uvec4 &Value) const =0
virtual bool SetFloat4(const std::string &Name, const vec4 &Value) const =0
virtual bool SetInt4(int Location, const ivec4 &Value) const =0
std::string DebugName
Definition: shader.h:50
virtual void Free()=0
virtual bool SetInt3(const std::string &Name, const ivec3 &Value) const =0
std::string PixelShadersourceFileName
Definition: shader.h:49
std::string SingleSourceFileName
Definition: shader.h:46
virtual bool SetFloat(int Location, float Value) const =0
virtual void Bind() const =0
virtual bool SetUInt2(const std::string &Name, const uvec2 &Value) const =0
shader_program(const std::string &DebugName)
Definition: shader.cpp:13
virtual bool SetFloat2(int Location, const vec2 &Value) const =0
virtual bool SetFloat4(int Location, const vec4 &Value) const =0
virtual bool SetFloat2(const std::string &Name, const vec2 &Value) const =0
virtual bool SetInt(int Location, int Value) const =0
virtual bool SetUInt2(int Location, const uvec2 &Value) const =0
virtual bool SetInt(const std::string &Name, int Value) const =0
virtual bool SetBool(int Location, bool Value) const =0
std::string VertexShadersourceFileName
Definition: shader.h:47
Definition: base.h:33
std::shared_ptr< T > shared
Definition: smart_ptr.h:15
uint32_t u32
Definition: math_common.h:21
shader_type
Definition: shader.h:17
Render primitive abstract class definition module.
shader_props()=default
shader_type Type
Definition: shader.h:27
shader_props(shader_type Type, const std::string &Source)
Definition: shader.h:39
std::string Source
Definition: shader.h:28