shader_effect_description.h
1/*
2** ClanLib SDK
3** Copyright (c) 1997-2020 The ClanLib Team
4**
5** This software is provided 'as-is', without any express or implied
6** warranty. In no event will the authors be held liable for any damages
7** arising from the use of this software.
8**
9** Permission is granted to anyone to use this software for any purpose,
10** including commercial applications, and to alter it and redistribute it
11** freely, subject to the following restrictions:
12**
13** 1. The origin of this software must not be misrepresented; you must not
14** claim that you wrote the original software. If you use this software
15** in a product, an acknowledgment in the product documentation would be
16** appreciated but is not required.
17** 2. Altered source versions must be plainly marked as such, and must not be
18** misrepresented as being the original software.
19** 3. This notice may not be removed or altered from any source distribution.
20**
21** Note: Some of the libraries ClanLib may link to may have additional
22** requirements or restrictions.
23**
24** File Author(s):
25**
26** Magnus Norddahl
27** Kenneth Gangstoe
28*/
29
30#pragma once
31
32#include <memory>
33#include "../Render/graphic_context.h"
34#include "../Render/rasterizer_state_description.h"
35#include "../Render/blend_state_description.h"
36#include "../Render/depth_stencil_state_description.h"
37#include "../Render/storage_buffer.h"
38#include "../Render/uniform_buffer.h"
39#include "../Render/texture.h"
40#include "../Render/render_buffer.h"
41#include "../../Core/Resources/resource.h"
42
43namespace clan
44{
47
48 class ShaderEffectDescription_Impl;
49
54 {
55 public:
57
58 void set_glsl_version(int version = 330);
59
60 void set_define(std::string name, std::string value = "1");
61
62 void set_vertex_shader(std::string code, ShaderLanguage language = ShaderLanguage::glsl);
63 void set_fragment_shader(std::string code, ShaderLanguage language = ShaderLanguage::glsl);
64 void set_compute_shader(std::string code, ShaderLanguage language = ShaderLanguage::glsl);
65
69
70 void set_frag_data(std::string name, RenderBuffer buffer);
71 void set_frag_data(std::string name, Texture texture);
72 void set_frag_data_to_back_buffer(std::string name);
73
75 void set_depth_data(Texture texture);
76
79
80 void set_texture(std::string name, Resource<Texture> texture);
81 void set_image(std::string name, Resource<Texture> texture);
82
83 void set_storage(std::string name, Resource<StorageBuffer> values);
84
85 void set_uniform_block(std::string name, Resource<UniformBuffer> values);
86
87 void set_attribute(std::string name, VertexArrayBuffer &buffer, int size, VertexAttributeDataType type, size_t offset = 0, int stride = 0, bool normalize = false);
88
89 void set_attribute(std::string name, VertexArrayVector<unsigned char> &buffer, int size, bool normalize = false)
90 {
92 }
93
94 void set_attribute(std::string name, VertexArrayVector<char> &buffer, int size, bool normalize = false)
95 {
96 set_attribute(name, (VertexArrayBuffer&)buffer, size, VertexAttributeDataType::type_byte, 0, 0, normalize);
97 }
98
99 void set_attribute(std::string name, VertexArrayVector<unsigned short> &buffer, int size, bool normalize = false)
100 {
102 }
103
104 void set_attribute(std::string name, VertexArrayVector<short> &buffer, int size, bool normalize = false)
105 {
106 set_attribute(name, (VertexArrayBuffer&)buffer, size, VertexAttributeDataType::type_short, 0, 0, normalize);
107 }
108
109 void set_attribute(std::string name, VertexArrayVector<unsigned int> &buffer, int size, bool normalize = false)
110 {
111 set_attribute(name, (VertexArrayBuffer&)buffer, size, VertexAttributeDataType::type_unsigned_int, 0, 0, normalize);
112 }
113
114 void set_attribute(std::string name, VertexArrayVector<int> &buffer, int size, bool normalize = false)
115 {
116 set_attribute(name, (VertexArrayBuffer&)buffer, size, VertexAttributeDataType::type_int, 0, 0, normalize);
117 }
118
119 void set_attribute(std::string name, VertexArrayVector<float> &buffer, int size, bool normalize = false)
120 {
121 set_attribute(name, (VertexArrayBuffer&)buffer, size, VertexAttributeDataType::type_float, 0, 0, normalize);
122 }
123
124 void set_attribute(std::string name, VertexArrayVector<unsigned char> &buffer, bool normalize = false)
125 {
126 set_attribute(name, (VertexArrayBuffer&)buffer, 1, VertexAttributeDataType::type_unsigned_byte, 0, sizeof(unsigned char), normalize);
127 }
128
129 void set_attribute(std::string name, VertexArrayVector<signed char> &buffer, bool normalize = false)
130 {
131 set_attribute(name, (VertexArrayBuffer&)buffer, 1, VertexAttributeDataType::type_byte, 0, sizeof(signed char), normalize);
132 }
133
134 void set_attribute(std::string name, VertexArrayVector<unsigned short> &buffer, bool normalize = false)
135 {
136 set_attribute(name, (VertexArrayBuffer&)buffer, 1, VertexAttributeDataType::type_unsigned_short, 0, sizeof(unsigned short), normalize);
137 }
138
139 void set_attribute(std::string name, VertexArrayVector<signed short> &buffer, bool normalize = false)
140 {
141 set_attribute(name, (VertexArrayBuffer&)buffer, 1, VertexAttributeDataType::type_short, 0, sizeof(signed short), normalize);
142 }
143
144 void set_attribute(std::string name, VertexArrayVector<unsigned int> &buffer, bool normalize = false)
145 {
146 set_attribute(name, (VertexArrayBuffer&)buffer, 1, VertexAttributeDataType::type_unsigned_int, 0, sizeof(unsigned int), normalize);
147 }
148
149 void set_attribute(std::string name, VertexArrayVector<signed int> &buffer, bool normalize = false)
150 {
151 set_attribute(name, (VertexArrayBuffer&)buffer, 1, VertexAttributeDataType::type_int, 0, sizeof(signed int), normalize);
152 }
153
154 void set_attribute(std::string name, VertexArrayVector<float> &buffer)
155 {
156 set_attribute(name, (VertexArrayBuffer&)buffer, 1, VertexAttributeDataType::type_float, 0, sizeof(float), false);
157 }
158
159 void set_attribute(std::string name, VertexArrayVector<Vec2ub> &buffer, bool normalize = false)
160 {
162 }
163
164 void set_attribute(std::string name, VertexArrayVector<Vec2b> &buffer, bool normalize = false)
165 {
166 set_attribute(name, (VertexArrayBuffer&)buffer, 2, VertexAttributeDataType::type_byte, 0, sizeof(Vec2b), normalize);
167 }
168
169 void set_attribute(std::string name, VertexArrayVector<Vec2us> &buffer, bool normalize = false)
170 {
172 }
173
174 void set_attribute(std::string name, VertexArrayVector<Vec2s> &buffer, bool normalize = false)
175 {
176 set_attribute(name, (VertexArrayBuffer&)buffer, 2, VertexAttributeDataType::type_short, 0, sizeof(Vec2s), normalize);
177 }
178
179 void set_attribute(std::string name, VertexArrayVector<Vec2ui> &buffer, bool normalize = false)
180 {
181 set_attribute(name, (VertexArrayBuffer&)buffer, 2, VertexAttributeDataType::type_unsigned_int, 0, sizeof(Vec2ui), normalize);
182 }
183
184 void set_attribute(std::string name, VertexArrayVector<Vec2i> &buffer, bool normalize = false)
185 {
186 set_attribute(name, (VertexArrayBuffer&)buffer, 2, VertexAttributeDataType::type_int, 0, sizeof(Vec2i), normalize);
187 }
188
189 void set_attribute(std::string name, VertexArrayVector<Vec2f> &buffer)
190 {
191 set_attribute(name, (VertexArrayBuffer&)buffer, 2, VertexAttributeDataType::type_float, 0, sizeof(Vec2f), false);
192 }
193
194 void set_attribute(std::string name, VertexArrayVector<Vec3ub> &buffer, bool normalize = false)
195 {
197 }
198
199 void set_attribute(std::string name, VertexArrayVector<Vec3b> &buffer, bool normalize = false)
200 {
201 set_attribute(name, (VertexArrayBuffer&)buffer, 3, VertexAttributeDataType::type_byte, 0, sizeof(Vec3b), normalize);
202 }
203
204 void set_attribute(std::string name, VertexArrayVector<Vec3us> &buffer, bool normalize = false)
205 {
207 }
208
209 void set_attribute(std::string name, VertexArrayVector<Vec3s> &buffer, bool normalize = false)
210 {
211 set_attribute(name, (VertexArrayBuffer&)buffer, 3, VertexAttributeDataType::type_short, 0, sizeof(Vec3s), normalize);
212 }
213
214 void set_attribute(std::string name, VertexArrayVector<Vec3ui> &buffer, bool normalize = false)
215 {
216 set_attribute(name, (VertexArrayBuffer&)buffer, 3, VertexAttributeDataType::type_unsigned_int, 0, sizeof(Vec3ui), normalize);
217 }
218
219 void set_attribute(std::string name, VertexArrayVector<Vec3i> &buffer, bool normalize = false)
220 {
221 set_attribute(name, (VertexArrayBuffer&)buffer, 3, VertexAttributeDataType::type_int, 0, sizeof(Vec3i), normalize);
222 }
223
224 void set_attribute(std::string name, VertexArrayVector<Vec3f> &buffer)
225 {
226 set_attribute(name, (VertexArrayBuffer&)buffer, 3, VertexAttributeDataType::type_float, 0, sizeof(Vec3f), false);
227 }
228
229 void set_attribute(std::string name, VertexArrayVector<Vec4ub> &buffer, bool normalize = false)
230 {
232 }
233
234 void set_attribute(std::string name, VertexArrayVector<Vec4b> &buffer, bool normalize = false)
235 {
236 set_attribute(name, (VertexArrayBuffer&)buffer, 4, VertexAttributeDataType::type_byte, 0, sizeof(Vec4b), normalize);
237 }
238
239 void set_attribute(std::string name, VertexArrayVector<Vec4us> &buffer, bool normalize = false)
240 {
242 }
243
244 void set_attribute(std::string name, VertexArrayVector<Vec4s> &buffer, bool normalize = false)
245 {
246 set_attribute(name, (VertexArrayBuffer&)buffer, 4, VertexAttributeDataType::type_short, 0, sizeof(Vec4s), normalize);
247 }
248
249 void set_attribute(std::string name, VertexArrayVector<Vec4ui> &buffer, bool normalize = false)
250 {
251 set_attribute(name, (VertexArrayBuffer&)buffer, 4, VertexAttributeDataType::type_unsigned_int, 0, sizeof(Vec4ui), normalize);
252 }
253
254 void set_attribute(std::string name, VertexArrayVector<Vec4i> &buffer, bool normalize = false)
255 {
256 set_attribute(name, (VertexArrayBuffer&)buffer, 4, VertexAttributeDataType::type_int, 0, sizeof(Vec4i), normalize);
257 }
258
259 void set_attribute(std::string name, VertexArrayVector<Vec4f> &buffer)
260 {
261 set_attribute(name, (VertexArrayBuffer&)buffer, 4, VertexAttributeDataType::type_float, 0, sizeof(Vec4f), false);
262 }
263
264 void set_attribute(std::string name, VertexArrayVector<Colorf> &buffer)
265 {
266 set_attribute(name, (VertexArrayBuffer&)buffer, 4, VertexAttributeDataType::type_float, 0, sizeof(Colorf), false);
267 }
268
269 void set_attribute_screen_quad(std::string name);
270 void set_attribute_uv_quad(std::string name);
271
272 void set_elements(ElementArrayBuffer &element_array, VertexAttributeDataType indices_type);
273
275 {
277 }
278
280 {
282 }
283
285 {
287 }
288
289 void set_draw_count(int count);
290
291 private:
292 std::shared_ptr<ShaderEffectDescription_Impl> impl;
293
294 friend class ShaderEffect;
295 };
296
298}
Blend state description.
Definition blend_state_description.h:42
Floating point color description class (for float).
Definition color.h:799
DepthStencil state description.
Definition depth_stencil_state_description.h:42
Element Array Buffer.
Definition element_array_buffer.h:46
Element Array Vector.
Definition element_array_vector.h:43
Rasterizer state description.
Definition rasterizer_state_description.h:42
Render-buffer object class.
Definition render_buffer.h:47
Resource proxy of a specific type.
Definition resource.h:58
Shader Effect Description.
Definition shader_effect_description.h:54
void set_attribute(std::string name, VertexArrayVector< unsigned char > &buffer, int size, bool normalize=false)
Definition shader_effect_description.h:89
void set_attribute(std::string name, VertexArrayVector< Vec4ui > &buffer, bool normalize=false)
Definition shader_effect_description.h:249
void set_attribute(std::string name, VertexArrayBuffer &buffer, int size, VertexAttributeDataType type, size_t offset=0, int stride=0, bool normalize=false)
void set_elements(ElementArrayVector< unsigned char > &element_array)
Definition shader_effect_description.h:284
void set_attribute(std::string name, VertexArrayVector< Vec2ub > &buffer, bool normalize=false)
Definition shader_effect_description.h:159
void set_define(std::string name, std::string value="1")
void set_attribute(std::string name, VertexArrayVector< Vec3f > &buffer)
Definition shader_effect_description.h:224
void set_attribute(std::string name, VertexArrayVector< Vec3ui > &buffer, bool normalize=false)
Definition shader_effect_description.h:214
void set_attribute(std::string name, VertexArrayVector< float > &buffer, int size, bool normalize=false)
Definition shader_effect_description.h:119
void set_attribute_uv_quad(std::string name)
void set_elements(ElementArrayVector< unsigned int > &element_array)
Definition shader_effect_description.h:274
void set_attribute(std::string name, VertexArrayVector< unsigned short > &buffer, bool normalize=false)
Definition shader_effect_description.h:134
void set_frag_data(std::string name, RenderBuffer buffer)
void set_attribute(std::string name, VertexArrayVector< Vec2b > &buffer, bool normalize=false)
Definition shader_effect_description.h:164
void set_attribute(std::string name, VertexArrayVector< Vec2ui > &buffer, bool normalize=false)
Definition shader_effect_description.h:179
void set_attribute(std::string name, VertexArrayVector< float > &buffer)
Definition shader_effect_description.h:154
void set_attribute(std::string name, VertexArrayVector< signed char > &buffer, bool normalize=false)
Definition shader_effect_description.h:129
DepthStencilStateDescription & depth_stencil()
void set_attribute(std::string name, VertexArrayVector< signed short > &buffer, bool normalize=false)
Definition shader_effect_description.h:139
void set_compute_shader(std::string code, ShaderLanguage language=ShaderLanguage::glsl)
void set_attribute(std::string name, VertexArrayVector< int > &buffer, int size, bool normalize=false)
Definition shader_effect_description.h:114
void set_attribute(std::string name, VertexArrayVector< unsigned char > &buffer, bool normalize=false)
Definition shader_effect_description.h:124
void set_attribute_screen_quad(std::string name)
void set_fragment_shader(std::string code, ShaderLanguage language=ShaderLanguage::glsl)
void set_attribute(std::string name, VertexArrayVector< short > &buffer, int size, bool normalize=false)
Definition shader_effect_description.h:104
void set_attribute(std::string name, VertexArrayVector< unsigned short > &buffer, int size, bool normalize=false)
Definition shader_effect_description.h:99
void set_attribute(std::string name, VertexArrayVector< Vec4f > &buffer)
Definition shader_effect_description.h:259
void set_attribute(std::string name, VertexArrayVector< Vec3b > &buffer, bool normalize=false)
Definition shader_effect_description.h:199
void set_depth_data(Texture texture)
void set_attribute(std::string name, VertexArrayVector< Vec3i > &buffer, bool normalize=false)
Definition shader_effect_description.h:219
void set_texture(std::string name, Resource< Texture > texture)
void set_attribute(std::string name, VertexArrayVector< Vec2i > &buffer, bool normalize=false)
Definition shader_effect_description.h:184
void set_stencil_data(Texture texture)
void set_attribute(std::string name, VertexArrayVector< Vec2s > &buffer, bool normalize=false)
Definition shader_effect_description.h:174
void set_uniform_block(std::string name, Resource< UniformBuffer > values)
void set_elements(ElementArrayVector< unsigned short > &element_array)
Definition shader_effect_description.h:279
void set_storage(std::string name, Resource< StorageBuffer > values)
void set_attribute(std::string name, VertexArrayVector< unsigned int > &buffer, bool normalize=false)
Definition shader_effect_description.h:144
void set_frag_data(std::string name, Texture texture)
void set_attribute(std::string name, VertexArrayVector< unsigned int > &buffer, int size, bool normalize=false)
Definition shader_effect_description.h:109
void set_vertex_shader(std::string code, ShaderLanguage language=ShaderLanguage::glsl)
void set_attribute(std::string name, VertexArrayVector< Vec3us > &buffer, bool normalize=false)
Definition shader_effect_description.h:204
void set_attribute(std::string name, VertexArrayVector< Vec4i > &buffer, bool normalize=false)
Definition shader_effect_description.h:254
void set_attribute(std::string name, VertexArrayVector< Vec2us > &buffer, bool normalize=false)
Definition shader_effect_description.h:169
void set_image(std::string name, Resource< Texture > texture)
void set_attribute(std::string name, VertexArrayVector< Vec3s > &buffer, bool normalize=false)
Definition shader_effect_description.h:209
void set_attribute(std::string name, VertexArrayVector< Vec4b > &buffer, bool normalize=false)
Definition shader_effect_description.h:234
void set_attribute(std::string name, VertexArrayVector< signed int > &buffer, bool normalize=false)
Definition shader_effect_description.h:149
void set_attribute(std::string name, VertexArrayVector< Vec4s > &buffer, bool normalize=false)
Definition shader_effect_description.h:244
void set_attribute(std::string name, VertexArrayVector< Vec2f > &buffer)
Definition shader_effect_description.h:189
RasterizerStateDescription & rasterizer()
void set_elements(ElementArrayBuffer &element_array, VertexAttributeDataType indices_type)
void set_attribute(std::string name, VertexArrayVector< Vec3ub > &buffer, bool normalize=false)
Definition shader_effect_description.h:194
void set_draw_count(int count)
BlendStateDescription & blend()
void set_depth_data(RenderBuffer buffer)
void set_attribute(std::string name, VertexArrayVector< char > &buffer, int size, bool normalize=false)
Definition shader_effect_description.h:94
void set_glsl_version(int version=330)
void set_attribute(std::string name, VertexArrayVector< Colorf > &buffer)
Definition shader_effect_description.h:264
void set_attribute(std::string name, VertexArrayVector< Vec4ub > &buffer, bool normalize=false)
Definition shader_effect_description.h:229
void set_stencil_data(RenderBuffer buffer)
void set_attribute(std::string name, VertexArrayVector< Vec4us > &buffer, bool normalize=false)
Definition shader_effect_description.h:239
void set_frag_data_to_back_buffer(std::string name)
Shader Feffect.
Definition shader_effect.h:45
Texture object class.
Definition texture.h:103
2D vector
Definition vec2.h:76
3D vector
Definition vec3.h:75
4D vector
Definition vec4.h:75
Vertex Array Buffer.
Definition vertex_array_buffer.h:46
Vertex Array Vector.
Definition vertex_array_vector.h:43
ShaderLanguage
Shader language used.
Definition graphic_context.h:248
VertexAttributeDataType
Primitives array description.
Definition primitives_array.h:56
Definition clanapp.h:36