shader_effect_description.h
1 /*
2 ** ClanLib SDK
3 ** Copyright (c) 1997-2013 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 
31 #pragma once
32 
33 #include <memory>
34 #include "../api_display.h"
35 #include "../Render/graphic_context.h"
36 #include "../Render/rasterizer_state_description.h"
37 #include "../Render/blend_state_description.h"
38 #include "../Render/depth_stencil_state_description.h"
39 #include "../Render/storage_buffer.h"
40 #include "../Render/uniform_buffer.h"
41 #include "../Render/texture.h"
42 #include "../Render/render_buffer.h"
43 #include "../../Core/Resources/resource.h"
44 
45 namespace clan
46 {
49 
50 class ShaderEffectDescription_Impl;
51 
55 class CL_API_DISPLAY ShaderEffectDescription
56 {
59 public:
62 
65 public:
67 
70 public:
71  void set_glsl_version(int version = 330);
72 
73  void set_define(std::string name, std::string value = "1");
74 
75  void set_vertex_shader(std::string code, ShaderLanguage language = shader_glsl);
76  void set_fragment_shader(std::string code, ShaderLanguage language = shader_glsl);
77  void set_compute_shader(std::string code, ShaderLanguage language = shader_glsl);
78 
79  RasterizerStateDescription &rasterizer();
80  BlendStateDescription &blend();
81  DepthStencilStateDescription &depth_stencil();
82 
83  void set_frag_data(std::string name, RenderBuffer buffer);
84  void set_frag_data(std::string name, Texture texture);
85  void set_frag_data_to_back_buffer(std::string name);
86 
87  void set_depth_data(RenderBuffer buffer);
88  void set_depth_data(Texture texture);
89 
90  void set_stencil_data(RenderBuffer buffer);
91  void set_stencil_data(Texture texture);
92 
93  void set_texture(std::string name, Resource<Texture> texture);
94  void set_image(std::string name, Resource<Texture> texture);
95 
96  void set_storage(std::string name, Resource<StorageBuffer> values);
97 
98  void set_uniform_block(std::string name, Resource<UniformBuffer> values);
99 
100  void set_attribute(std::string name, VertexArrayBuffer &buffer, int size, VertexAttributeDataType type, size_t offset = 0, int stride = 0, bool normalize = false);
101 
102  void set_attribute(std::string name, VertexArrayVector<unsigned char> &buffer, int size, bool normalize = false)
103  {
104  set_attribute(name, (VertexArrayBuffer&)buffer, size, type_unsigned_byte, 0, 0, normalize);
105  }
106 
107  void set_attribute(std::string name, VertexArrayVector<char> &buffer, int size, bool normalize = false)
108  {
109  set_attribute(name, (VertexArrayBuffer&)buffer, size, type_byte, 0, 0, normalize);
110  }
111 
112  void set_attribute(std::string name, VertexArrayVector<unsigned short> &buffer, int size, bool normalize = false)
113  {
114  set_attribute(name, (VertexArrayBuffer&)buffer, size, type_unsigned_short, 0, 0, normalize);
115  }
116 
117  void set_attribute(std::string name, VertexArrayVector<short> &buffer, int size, bool normalize = false)
118  {
119  set_attribute(name, (VertexArrayBuffer&)buffer, size, type_short, 0, 0, normalize);
120  }
121 
122  void set_attribute(std::string name, VertexArrayVector<unsigned int> &buffer, int size, bool normalize = false)
123  {
124  set_attribute(name, (VertexArrayBuffer&)buffer, size, type_unsigned_int, 0, 0, normalize);
125  }
126 
127  void set_attribute(std::string name, VertexArrayVector<int> &buffer, int size, bool normalize = false)
128  {
129  set_attribute(name, (VertexArrayBuffer&)buffer, size, type_int, 0, 0, normalize);
130  }
131 
132  void set_attribute(std::string name, VertexArrayVector<float> &buffer, int size, bool normalize = false)
133  {
134  set_attribute(name, (VertexArrayBuffer&)buffer, size, type_float, 0, 0, normalize);
135  }
136 
137  void set_attribute(std::string name, VertexArrayVector<unsigned char> &buffer, bool normalize = false)
138  {
139  set_attribute(name, (VertexArrayBuffer&)buffer, 1, type_unsigned_byte, 0, sizeof(unsigned char), normalize);
140  }
141 
142  void set_attribute(std::string name, VertexArrayVector<signed char> &buffer, bool normalize = false)
143  {
144  set_attribute(name, (VertexArrayBuffer&)buffer, 1, type_byte, 0, sizeof(signed char), normalize);
145  }
146 
147  void set_attribute(std::string name, VertexArrayVector<unsigned short> &buffer, bool normalize = false)
148  {
149  set_attribute(name, (VertexArrayBuffer&)buffer, 1, type_unsigned_short, 0, sizeof(unsigned short), normalize);
150  }
151 
152  void set_attribute(std::string name, VertexArrayVector<signed short> &buffer, bool normalize = false)
153  {
154  set_attribute(name, (VertexArrayBuffer&)buffer, 1, type_short, 0, sizeof(signed short), normalize);
155  }
156 
157  void set_attribute(std::string name, VertexArrayVector<unsigned int> &buffer, bool normalize = false)
158  {
159  set_attribute(name, (VertexArrayBuffer&)buffer, 1, type_unsigned_int, 0, sizeof(unsigned int), normalize);
160  }
161 
162  void set_attribute(std::string name, VertexArrayVector<signed int> &buffer, bool normalize = false)
163  {
164  set_attribute(name, (VertexArrayBuffer&)buffer, 1, type_int, 0, sizeof(signed int), normalize);
165  }
166 
167  void set_attribute(std::string name, VertexArrayVector<float> &buffer)
168  {
169  set_attribute(name, (VertexArrayBuffer&)buffer, 1, type_float, 0, sizeof(float), false);
170  }
171 
172  void set_attribute(std::string name, VertexArrayVector<Vec2ub> &buffer, bool normalize = false)
173  {
174  set_attribute(name, (VertexArrayBuffer&)buffer, 2, type_unsigned_byte, 0, sizeof(Vec2ub), normalize);
175  }
176 
177  void set_attribute(std::string name, VertexArrayVector<Vec2b> &buffer, bool normalize = false)
178  {
179  set_attribute(name, (VertexArrayBuffer&)buffer, 2, type_byte, 0, sizeof(Vec2b), normalize);
180  }
181 
182  void set_attribute(std::string name, VertexArrayVector<Vec2us> &buffer, bool normalize = false)
183  {
184  set_attribute(name, (VertexArrayBuffer&)buffer, 2, type_unsigned_short, 0, sizeof(Vec2us), normalize);
185  }
186 
187  void set_attribute(std::string name, VertexArrayVector<Vec2s> &buffer, bool normalize = false)
188  {
189  set_attribute(name, (VertexArrayBuffer&)buffer, 2, type_short, 0, sizeof(Vec2s), normalize);
190  }
191 
192  void set_attribute(std::string name, VertexArrayVector<Vec2ui> &buffer, bool normalize = false)
193  {
194  set_attribute(name, (VertexArrayBuffer&)buffer, 2, type_unsigned_int, 0, sizeof(Vec2ui), normalize);
195  }
196 
197  void set_attribute(std::string name, VertexArrayVector<Vec2i> &buffer, bool normalize = false)
198  {
199  set_attribute(name, (VertexArrayBuffer&)buffer, 2, type_int, 0, sizeof(Vec2i), normalize);
200  }
201 
202  void set_attribute(std::string name, VertexArrayVector<Vec2f> &buffer)
203  {
204  set_attribute(name, (VertexArrayBuffer&)buffer, 2, type_float, 0, sizeof(Vec2f), false);
205  }
206 
207  void set_attribute(std::string name, VertexArrayVector<Vec3ub> &buffer, bool normalize = false)
208  {
209  set_attribute(name, (VertexArrayBuffer&)buffer, 3, type_unsigned_byte, 0, sizeof(Vec3ub), normalize);
210  }
211 
212  void set_attribute(std::string name, VertexArrayVector<Vec3b> &buffer, bool normalize = false)
213  {
214  set_attribute(name, (VertexArrayBuffer&)buffer, 3, type_byte, 0, sizeof(Vec3b), normalize);
215  }
216 
217  void set_attribute(std::string name, VertexArrayVector<Vec3us> &buffer, bool normalize = false)
218  {
219  set_attribute(name, (VertexArrayBuffer&)buffer, 3, type_unsigned_short, 0, sizeof(Vec3us), normalize);
220  }
221 
222  void set_attribute(std::string name, VertexArrayVector<Vec3s> &buffer, bool normalize = false)
223  {
224  set_attribute(name, (VertexArrayBuffer&)buffer, 3, type_short, 0, sizeof(Vec3s), normalize);
225  }
226 
227  void set_attribute(std::string name, VertexArrayVector<Vec3ui> &buffer, bool normalize = false)
228  {
229  set_attribute(name, (VertexArrayBuffer&)buffer, 3, type_unsigned_int, 0, sizeof(Vec3ui), normalize);
230  }
231 
232  void set_attribute(std::string name, VertexArrayVector<Vec3i> &buffer, bool normalize = false)
233  {
234  set_attribute(name, (VertexArrayBuffer&)buffer, 3, type_int, 0, sizeof(Vec3i), normalize);
235  }
236 
237  void set_attribute(std::string name, VertexArrayVector<Vec3f> &buffer)
238  {
239  set_attribute(name, (VertexArrayBuffer&)buffer, 3, type_float, 0, sizeof(Vec3f), false);
240  }
241 
242  void set_attribute(std::string name, VertexArrayVector<Vec4ub> &buffer, bool normalize = false)
243  {
244  set_attribute(name, (VertexArrayBuffer&)buffer, 4, type_unsigned_byte, 0, sizeof(Vec4ub), normalize);
245  }
246 
247  void set_attribute(std::string name, VertexArrayVector<Vec4b> &buffer, bool normalize = false)
248  {
249  set_attribute(name, (VertexArrayBuffer&)buffer, 4, type_byte, 0, sizeof(Vec4b), normalize);
250  }
251 
252  void set_attribute(std::string name, VertexArrayVector<Vec4us> &buffer, bool normalize = false)
253  {
254  set_attribute(name, (VertexArrayBuffer&)buffer, 4, type_unsigned_short, 0, sizeof(Vec4us), normalize);
255  }
256 
257  void set_attribute(std::string name, VertexArrayVector<Vec4s> &buffer, bool normalize = false)
258  {
259  set_attribute(name, (VertexArrayBuffer&)buffer, 4, type_short, 0, sizeof(Vec4s), normalize);
260  }
261 
262  void set_attribute(std::string name, VertexArrayVector<Vec4ui> &buffer, bool normalize = false)
263  {
264  set_attribute(name, (VertexArrayBuffer&)buffer, 4, type_unsigned_int, 0, sizeof(Vec4ui), normalize);
265  }
266 
267  void set_attribute(std::string name, VertexArrayVector<Vec4i> &buffer, bool normalize = false)
268  {
269  set_attribute(name, (VertexArrayBuffer&)buffer, 4, type_int, 0, sizeof(Vec4i), normalize);
270  }
271 
272  void set_attribute(std::string name, VertexArrayVector<Vec4f> &buffer)
273  {
274  set_attribute(name, (VertexArrayBuffer&)buffer, 4, type_float, 0, sizeof(Vec4f), false);
275  }
276 
277  void set_attribute(std::string name, VertexArrayVector<Colorf> &buffer)
278  {
279  set_attribute(name, (VertexArrayBuffer&)buffer, 4, type_float, 0, sizeof(Colorf), false);
280  }
281 
282  void set_attribute_screen_quad(std::string name);
283  void set_attribute_uv_quad(std::string name);
284 
285  void set_elements(ElementArrayBuffer &element_array, VertexAttributeDataType indices_type);
286 
288  {
289  set_elements(element_array, type_unsigned_int);
290  }
291 
293  {
294  set_elements(element_array, type_unsigned_short);
295  }
296 
298  {
299  set_elements(element_array, type_unsigned_byte);
300  }
301 
302  void set_draw_count(int count);
303 
305 
308 private:
309  std::shared_ptr<ShaderEffectDescription_Impl> impl;
311 
312  friend class ShaderEffect;
313 };
314 
315 }
316 
Rasterizer state description.
Definition: rasterizer_state_description.h:43
Floating point color description class (for float).
Definition: color.h:661
Definition: primitives_array.h:65
void set_attribute(std::string name, VertexArrayVector< Vec3ub > &buffer, bool normalize=false)
Definition: shader_effect_description.h:207
void set_elements(ElementArrayVector< unsigned char > &element_array)
Definition: shader_effect_description.h:297
Resource proxy of a specific type.
Definition: resource.h:59
void set_attribute(std::string name, VertexArrayVector< Vec2ui > &buffer, bool normalize=false)
Definition: shader_effect_description.h:192
void set_attribute(std::string name, VertexArrayVector< char > &buffer, int size, bool normalize=false)
Definition: shader_effect_description.h:107
Vertex Array Buffer.
Definition: vertex_array_buffer.h:47
Blend state description.
Definition: blend_state_description.h:43
Texture object class.
Definition: texture.h:104
void set_attribute(std::string name, VertexArrayVector< float > &buffer)
Definition: shader_effect_description.h:167
void set_attribute(std::string name, VertexArrayVector< Vec2s > &buffer, bool normalize=false)
Definition: shader_effect_description.h:187
void set_attribute(std::string name, VertexArrayVector< Colorf > &buffer)
Definition: shader_effect_description.h:277
Element Array Vector.
Definition: element_array_vector.h:43
void set_attribute(std::string name, VertexArrayVector< signed char > &buffer, bool normalize=false)
Definition: shader_effect_description.h:142
Definition: primitives_array.h:63
void set_attribute(std::string name, VertexArrayVector< Vec3s > &buffer, bool normalize=false)
Definition: shader_effect_description.h:222
void set_attribute(std::string name, VertexArrayVector< unsigned short > &buffer, int size, bool normalize=false)
Definition: shader_effect_description.h:112
Shader Effect Description.
Definition: shader_effect_description.h:55
void set_attribute(std::string name, VertexArrayVector< unsigned int > &buffer, bool normalize=false)
Definition: shader_effect_description.h:157
ShaderLanguage
Shader language used.
Definition: graphic_context.h:248
void set_attribute(std::string name, VertexArrayVector< unsigned char > &buffer, bool normalize=false)
Definition: shader_effect_description.h:137
void set_attribute(std::string name, VertexArrayVector< Vec2i > &buffer, bool normalize=false)
Definition: shader_effect_description.h:197
void set_attribute(std::string name, VertexArrayVector< Vec4ui > &buffer, bool normalize=false)
Definition: shader_effect_description.h:262
void set_attribute(std::string name, VertexArrayVector< Vec4us > &buffer, bool normalize=false)
Definition: shader_effect_description.h:252
void set_attribute(std::string name, VertexArrayVector< Vec2us > &buffer, bool normalize=false)
Definition: shader_effect_description.h:182
void set_elements(ElementArrayVector< unsigned short > &element_array)
Definition: shader_effect_description.h:292
void set_attribute(std::string name, VertexArrayVector< Vec3b > &buffer, bool normalize=false)
Definition: shader_effect_description.h:212
void set_attribute(std::string name, VertexArrayVector< Vec4i > &buffer, bool normalize=false)
Definition: shader_effect_description.h:267
void set_attribute(std::string name, VertexArrayVector< Vec4ub > &buffer, bool normalize=false)
Definition: shader_effect_description.h:242
void set_attribute(std::string name, VertexArrayVector< int > &buffer, int size, bool normalize=false)
Definition: shader_effect_description.h:127
Definition: primitives_array.h:59
void set_attribute(std::string name, VertexArrayVector< Vec4b > &buffer, bool normalize=false)
Definition: shader_effect_description.h:247
void set_attribute(std::string name, VertexArrayVector< signed int > &buffer, bool normalize=false)
Definition: shader_effect_description.h:162
Definition: graphic_context.h:250
void set_attribute(std::string name, VertexArrayVector< Vec3f > &buffer)
Definition: shader_effect_description.h:237
Definition: primitives_array.h:60
void set_attribute(std::string name, VertexArrayVector< signed short > &buffer, bool normalize=false)
Definition: shader_effect_description.h:152
2D vector
Definition: line.h:49
void set_attribute(std::string name, VertexArrayVector< Vec4f > &buffer)
Definition: shader_effect_description.h:272
void set_attribute(std::string name, VertexArrayVector< unsigned short > &buffer, bool normalize=false)
Definition: shader_effect_description.h:147
Definition: primitives_array.h:64
void set_attribute(std::string name, VertexArrayVector< Vec2f > &buffer)
Definition: shader_effect_description.h:202
void set_elements(ElementArrayVector< unsigned int > &element_array)
Definition: shader_effect_description.h:287
Definition: primitives_array.h:61
Element Array Buffer.
Definition: element_array_buffer.h:47
void set_attribute(std::string name, VertexArrayVector< Vec2ub > &buffer, bool normalize=false)
Definition: shader_effect_description.h:172
3D vector
Definition: line_ray.h:49
void set_attribute(std::string name, VertexArrayVector< Vec3ui > &buffer, bool normalize=false)
Definition: shader_effect_description.h:227
void set_attribute(std::string name, VertexArrayVector< Vec2b > &buffer, bool normalize=false)
Definition: shader_effect_description.h:177
DepthStencil state description.
Definition: depth_stencil_state_description.h:43
VertexAttributeDataType
Primitives array description.
Definition: primitives_array.h:57
void set_attribute(std::string name, VertexArrayVector< float > &buffer, int size, bool normalize=false)
Definition: shader_effect_description.h:132
void set_attribute(std::string name, VertexArrayVector< Vec3us > &buffer, bool normalize=false)
Definition: shader_effect_description.h:217
void set_attribute(std::string name, VertexArrayVector< unsigned char > &buffer, int size, bool normalize=false)
Definition: shader_effect_description.h:102
void set_attribute(std::string name, VertexArrayVector< Vec4s > &buffer, bool normalize=false)
Definition: shader_effect_description.h:257
4D vector
Definition: size.h:48
void set_attribute(std::string name, VertexArrayVector< Vec3i > &buffer, bool normalize=false)
Definition: shader_effect_description.h:232
void set_attribute(std::string name, VertexArrayVector< short > &buffer, int size, bool normalize=false)
Definition: shader_effect_description.h:117
Render-buffer object class.
Definition: render_buffer.h:48
Definition: primitives_array.h:62
Vertex Array Vector.
Definition: vertex_array_vector.h:43
void set_attribute(std::string name, VertexArrayVector< unsigned int > &buffer, int size, bool normalize=false)
Definition: shader_effect_description.h:122
Shader Feffect.
Definition: shader_effect.h:46