update to 1.10.4
[profile/ivi/clutter.git] / doc / reference / clutter / html / ClutterShaderEffect.html
1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2 <html>
3 <head>
4 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
5 <title>ClutterShaderEffect</title>
6 <meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
7 <link rel="home" href="index.html" title="Clutter Reference Manual">
8 <link rel="up" href="ch06.html" title="Effects">
9 <link rel="prev" href="ClutterOffscreenEffect.html" title="ClutterOffscreenEffect">
10 <link rel="next" href="ClutterDeformEffect.html" title="ClutterDeformEffect">
11 <meta name="generator" content="GTK-Doc V1.18.1 (XML mode)">
12 <link rel="stylesheet" href="style.css" type="text/css">
13 </head>
14 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
15 <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
16 <tr valign="middle">
17 <td><a accesskey="p" href="ClutterOffscreenEffect.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
18 <td><a accesskey="u" href="ch06.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
19 <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
20 <th width="100%" align="center">Clutter Reference Manual</th>
21 <td><a accesskey="n" href="ClutterDeformEffect.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
22 </tr>
23 <tr><td colspan="5" class="shortcuts">
24 <a href="#ClutterShaderEffect.synopsis" class="shortcut">Top</a>
25                    | 
26                   <a href="#ClutterShaderEffect.description" class="shortcut">Description</a>
27                    | 
28                   <a href="#ClutterShaderEffect.object-hierarchy" class="shortcut">Object Hierarchy</a>
29                    | 
30                   <a href="#ClutterShaderEffect.properties" class="shortcut">Properties</a>
31 </td></tr>
32 </table>
33 <div class="refentry">
34 <a name="ClutterShaderEffect"></a><div class="titlepage"></div>
35 <div class="refnamediv"><table width="100%"><tr>
36 <td valign="top">
37 <h2><span class="refentrytitle"><a name="ClutterShaderEffect.top_of_page"></a>ClutterShaderEffect</span></h2>
38 <p>ClutterShaderEffect — Base class for shader effects</p>
39 </td>
40 <td valign="top" align="right"></td>
41 </tr></table></div>
42 <div class="refsynopsisdiv">
43 <a name="ClutterShaderEffect.synopsis"></a><h2>Synopsis</h2>
44 <pre class="synopsis">enum                <a class="link" href="ClutterShaderEffect.html#ClutterShaderType" title="enum ClutterShaderType">ClutterShaderType</a>;
45 struct              <a class="link" href="ClutterShaderEffect.html#ClutterShaderEffect-struct" title="struct ClutterShaderEffect">ClutterShaderEffect</a>;
46 struct              <a class="link" href="ClutterShaderEffect.html#ClutterShaderEffectClass" title="struct ClutterShaderEffectClass">ClutterShaderEffectClass</a>;
47 <a class="link" href="ClutterEffect.html" title="ClutterEffect"><span class="returnvalue">ClutterEffect</span></a> *     <a class="link" href="ClutterShaderEffect.html#clutter-shader-effect-new" title="clutter_shader_effect_new ()">clutter_shader_effect_new</a>           (<em class="parameter"><code><a class="link" href="ClutterShaderEffect.html#ClutterShaderType" title="enum ClutterShaderType"><span class="type">ClutterShaderType</span></a> shader_type</code></em>);
48 <span class="returnvalue">void</span>                <a class="link" href="ClutterShaderEffect.html#clutter-shader-effect-set-uniform" title="clutter_shader_effect_set_uniform ()">clutter_shader_effect_set_uniform</a>   (<em class="parameter"><code><a class="link" href="ClutterShaderEffect.html" title="ClutterShaderEffect"><span class="type">ClutterShaderEffect</span></a> *effect</code></em>,
49                                                          <em class="parameter"><code>const <a href="../glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
50                                                          <em class="parameter"><code><a href="../gobject/gobject-Type-Information.html#GType"><span class="type">GType</span></a> gtype</code></em>,
51                                                          <em class="parameter"><code><a href="../glib/glib-Basic-Types.html#gsize"><span class="type">gsize</span></a> n_values</code></em>,
52                                                          <em class="parameter"><code>...</code></em>);
53 <span class="returnvalue">void</span>                <a class="link" href="ClutterShaderEffect.html#clutter-shader-effect-set-uniform-value" title="clutter_shader_effect_set_uniform_value ()">clutter_shader_effect_set_uniform_value</a>
54                                                         (<em class="parameter"><code><a class="link" href="ClutterShaderEffect.html" title="ClutterShaderEffect"><span class="type">ClutterShaderEffect</span></a> *effect</code></em>,
55                                                          <em class="parameter"><code>const <a href="../glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
56                                                          <em class="parameter"><code>const <a href="../gobject/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> *value</code></em>);
57
58 <a href="../glib/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="ClutterShaderEffect.html#clutter-shader-effect-set-shader-source" title="clutter_shader_effect_set_shader_source ()">clutter_shader_effect_set_shader_source</a>
59                                                         (<em class="parameter"><code><a class="link" href="ClutterShaderEffect.html" title="ClutterShaderEffect"><span class="type">ClutterShaderEffect</span></a> *effect</code></em>,
60                                                          <em class="parameter"><code>const <a href="../glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *source</code></em>);
61 <span class="returnvalue">CoglHandle</span>          <a class="link" href="ClutterShaderEffect.html#clutter-shader-effect-get-program" title="clutter_shader_effect_get_program ()">clutter_shader_effect_get_program</a>   (<em class="parameter"><code><a class="link" href="ClutterShaderEffect.html" title="ClutterShaderEffect"><span class="type">ClutterShaderEffect</span></a> *effect</code></em>);
62 <span class="returnvalue">CoglHandle</span>          <a class="link" href="ClutterShaderEffect.html#clutter-shader-effect-get-shader" title="clutter_shader_effect_get_shader ()">clutter_shader_effect_get_shader</a>    (<em class="parameter"><code><a class="link" href="ClutterShaderEffect.html" title="ClutterShaderEffect"><span class="type">ClutterShaderEffect</span></a> *effect</code></em>);
63 </pre>
64 </div>
65 <div class="refsect1">
66 <a name="ClutterShaderEffect.object-hierarchy"></a><h2>Object Hierarchy</h2>
67 <pre class="synopsis">
68   <a href="../gobject/gobject-The-Base-Object-Type.html#GObject">GObject</a>
69    +----<a href="../gobject/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
70          +----<a class="link" href="ClutterActorMeta.html" title="ClutterActorMeta">ClutterActorMeta</a>
71                +----<a class="link" href="ClutterEffect.html" title="ClutterEffect">ClutterEffect</a>
72                      +----<a class="link" href="ClutterOffscreenEffect.html" title="ClutterOffscreenEffect">ClutterOffscreenEffect</a>
73                            +----ClutterShaderEffect
74 </pre>
75 </div>
76 <div class="refsect1">
77 <a name="ClutterShaderEffect.properties"></a><h2>Properties</h2>
78 <pre class="synopsis">
79   "<a class="link" href="ClutterShaderEffect.html#ClutterShaderEffect--shader-type" title='The "shader-type" property'>shader-type</a>"              <a class="link" href="ClutterShaderEffect.html#ClutterShaderType" title="enum ClutterShaderType"><span class="type">ClutterShaderType</span></a>     : Write / Construct Only
80 </pre>
81 </div>
82 <div class="refsect1">
83 <a name="ClutterShaderEffect.description"></a><h2>Description</h2>
84 <p>
85 <a class="link" href="ClutterShaderEffect.html" title="ClutterShaderEffect"><span class="type">ClutterShaderEffect</span></a> is a class that implements all the plumbing for
86 creating <a class="link" href="ClutterEffect.html" title="ClutterEffect"><span class="type">ClutterEffect</span></a>s using GLSL shaders.
87 </p>
88 <p>
89 <a class="link" href="ClutterShaderEffect.html" title="ClutterShaderEffect"><span class="type">ClutterShaderEffect</span></a> creates an offscreen buffer and then applies the
90 GLSL shader (after checking whether the compilation and linking were
91 successfull) to the buffer before painting it on screen.
92 </p>
93 <p>
94 </p>
95 <div class="refsect2">
96 <a name="ClutterShaderEffect-implementing"></a><h3>Implementing a ClutterShaderEffect</h3>
97 <p>Creating a sub-class of <a class="link" href="ClutterShaderEffect.html" title="ClutterShaderEffect"><span class="type">ClutterShaderEffect</span></a> requires the
98   overriding of the <code class="function"><code class="function">paint_target()</code></code> virtual
99   function from the <a class="link" href="ClutterOffscreenEffect.html" title="ClutterOffscreenEffect"><span class="type">ClutterOffscreenEffect</span></a> class as well as the
100   <code class="function"><code class="function">get_static_shader_source()</code></code> virtual from the
101   <a class="link" href="ClutterShaderEffect.html" title="ClutterShaderEffect"><span class="type">ClutterShaderEffect</span></a> class.</p>
102 <p>The <code class="function"><code class="function">get_static_shader_source()</code></code>
103   function should return a copy of the shader source to use. This
104   function is only called once per subclass of <a class="link" href="ClutterShaderEffect.html" title="ClutterShaderEffect"><span class="type">ClutterShaderEffect</span></a>
105   regardless of how many instances of the effect are created. The
106   source for the shader is typically stored in a static const
107   string which is returned from this function via
108   <a href="../glib/glib-String-Utility-Functions.html#g-strdup"><code class="function">g_strdup()</code></a>.</p>
109 <p>The <code class="function"><code class="function">paint_target()</code></code> should set the
110   shader's uniforms if any. This is done by calling
111   <a class="link" href="ClutterShaderEffect.html#clutter-shader-effect-set-uniform-value" title="clutter_shader_effect_set_uniform_value ()"><code class="function">clutter_shader_effect_set_uniform_value()</code></a> or
112   <a class="link" href="ClutterShaderEffect.html#clutter-shader-effect-set-uniform" title="clutter_shader_effect_set_uniform ()"><code class="function">clutter_shader_effect_set_uniform()</code></a>. The sub-class should then
113   chain up to the <a class="link" href="ClutterShaderEffect.html" title="ClutterShaderEffect"><span class="type">ClutterShaderEffect</span></a> implementation.</p>
114 <div class="example">
115 <a name="ClutterShaderEffect-example-uniforms"></a><p class="title"><b>Example 9. Setting uniforms on a ClutterShaderEffect</b></p>
116 <div class="example-contents">
117 <p>The example below shows a typical implementation of the
118     <code class="function"><code class="function">get_static_shader_source()</code></code> and
119     <code class="function"><code class="function">paint_target()</code></code> phases of a
120     <a class="link" href="ClutterShaderEffect.html" title="ClutterShaderEffect"><span class="type">ClutterShaderEffect</span></a> sub-class.</p>
121 <pre class="programlisting">
122  static gchar *
123  my_effect_get_static_shader_source (ClutterShaderEffect *effect)
124  {
125    return g_strdup (shader_source);
126  }
127
128  static gboolean
129  my_effect_paint_target (ClutterOffscreenEffect *effect)
130  {
131    MyEffect *self = MY_EFFECT (effect);
132    ClutterShaderEffect *shader = CLUTTER_SHADER_EFFECT (effect);
133    ClutterEffectClass *parent_class;
134    gfloat component_r, component_g, component_b;
135
136    /* the "tex" uniform is declared in the shader as:
137     *
138     *   uniform int tex;
139     *
140     * and it is passed a constant value of 0
141     */
142    clutter_shader_effect_set_uniform (shader, "tex", G_TYPE_INT, 1, 0);
143
144    /* the "component" uniform is declared in the shader as:
145     *
146     *   uniform vec3 component;
147     *
148     * and it's defined to contain the normalized components
149     * of a <a class="link" href="clutter-Colors.html#ClutterColor" title="ClutterColor">ClutterColor</a>
150     */
151    component_r = self-&gt;color.red   / 255.0f;
152    component_g = self-&gt;color.green / 255.0f;
153    component_b = self-&gt;color.blue  / 255.0f;
154    clutter_shader_effect_set_uniform (shader, "component",
155                                       G_TYPE_FLOAT, 3,
156                                       component_r,
157                                       component_g,
158                                       component_b);
159
160    /* chain up to the parent's implementation */
161    parent_class = CLUTTER_OFFSCREEN_EFFECT_CLASS (my_effect_parent_class);
162    return parent_class-&gt;paint_target (effect);
163  }
164     </pre>
165 </div>
166 </div>
167 <br class="example-break">
168 </div>
169 <p>
170 </p>
171 <p>
172 <a class="link" href="ClutterShaderEffect.html" title="ClutterShaderEffect"><span class="type">ClutterShaderEffect</span></a> is available since Clutter 1.4
173 </p>
174 </div>
175 <div class="refsect1">
176 <a name="ClutterShaderEffect.details"></a><h2>Details</h2>
177 <div class="refsect2">
178 <a name="ClutterShaderType"></a><h3>enum ClutterShaderType</h3>
179 <pre class="programlisting">typedef enum {
180   CLUTTER_VERTEX_SHADER,
181   CLUTTER_FRAGMENT_SHADER
182 } ClutterShaderType;
183 </pre>
184 <p>
185 The type of GLSL shader program
186 </p>
187 <div class="variablelist"><table border="0">
188 <col align="left" valign="top">
189 <tbody>
190 <tr>
191 <td><p><a name="CLUTTER-VERTEX-SHADER:CAPS"></a><span class="term"><code class="literal">CLUTTER_VERTEX_SHADER</code></span></p></td>
192 <td>a vertex shader
193 </td>
194 </tr>
195 <tr>
196 <td><p><a name="CLUTTER-FRAGMENT-SHADER:CAPS"></a><span class="term"><code class="literal">CLUTTER_FRAGMENT_SHADER</code></span></p></td>
197 <td>a fragment shader
198 </td>
199 </tr>
200 </tbody>
201 </table></div>
202 <p class="since">Since 1.4</p>
203 </div>
204 <hr>
205 <div class="refsect2">
206 <a name="ClutterShaderEffect-struct"></a><h3>struct ClutterShaderEffect</h3>
207 <pre class="programlisting">struct ClutterShaderEffect;</pre>
208 <p>
209 The <span class="structname">ClutterShaderEffect</span> structure contains
210 only private data and should be accessed using the provided API
211 </p>
212 <p class="since">Since 1.4</p>
213 </div>
214 <hr>
215 <div class="refsect2">
216 <a name="ClutterShaderEffectClass"></a><h3>struct ClutterShaderEffectClass</h3>
217 <pre class="programlisting">struct ClutterShaderEffectClass {
218   gchar * (* get_static_shader_source) (ClutterShaderEffect *effect);
219 };
220 </pre>
221 <p>
222 The <span class="structname">ClutterShaderEffectClass</span> structure contains
223 only private data
224 </p>
225 <div class="variablelist"><table border="0">
226 <col align="left" valign="top">
227 <tbody><tr>
228 <td><p><span class="term"><em class="structfield"><code><a name="ClutterShaderEffectClass.get-static-shader-source"></a>get_static_shader_source</code></em> ()</span></p></td>
229 <td>Returns the GLSL source code to use for
230 instances of this shader effect. Note that this function is only
231 called once per subclass of <a class="link" href="ClutterShaderEffect.html" title="ClutterShaderEffect"><span class="type">ClutterShaderEffect</span></a> regardless of how
232 many instances are used. It is expected that subclasses will return
233 a copy of a static string from this function.</td>
234 </tr></tbody>
235 </table></div>
236 <p class="since">Since 1.4</p>
237 </div>
238 <hr>
239 <div class="refsect2">
240 <a name="clutter-shader-effect-new"></a><h3>clutter_shader_effect_new ()</h3>
241 <pre class="programlisting"><a class="link" href="ClutterEffect.html" title="ClutterEffect"><span class="returnvalue">ClutterEffect</span></a> *     clutter_shader_effect_new           (<em class="parameter"><code><a class="link" href="ClutterShaderEffect.html#ClutterShaderType" title="enum ClutterShaderType"><span class="type">ClutterShaderType</span></a> shader_type</code></em>);</pre>
242 <p>
243 Creates a new <a class="link" href="ClutterShaderEffect.html" title="ClutterShaderEffect"><span class="type">ClutterShaderEffect</span></a>, to be applied to an actor using
244 <a class="link" href="ClutterActor.html#clutter-actor-add-effect" title="clutter_actor_add_effect ()"><code class="function">clutter_actor_add_effect()</code></a>.
245 </p>
246 <p>
247 The effect will be empty until <a class="link" href="ClutterShaderEffect.html#clutter-shader-effect-set-shader-source" title="clutter_shader_effect_set_shader_source ()"><code class="function">clutter_shader_effect_set_shader_source()</code></a>
248 is called.
249 </p>
250 <div class="variablelist"><table border="0">
251 <col align="left" valign="top">
252 <tbody>
253 <tr>
254 <td><p><span class="term"><em class="parameter"><code>shader_type</code></em> :</span></p></td>
255 <td>the type of the shader, either <a class="link" href="ClutterShaderEffect.html#CLUTTER-FRAGMENT-SHADER:CAPS"><code class="literal">CLUTTER_FRAGMENT_SHADER</code></a>,
256 or <a class="link" href="ClutterShaderEffect.html#CLUTTER-VERTEX-SHADER:CAPS"><code class="literal">CLUTTER_VERTEX_SHADER</code></a>
257 </td>
258 </tr>
259 <tr>
260 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
261 <td>the newly created <a class="link" href="ClutterShaderEffect.html" title="ClutterShaderEffect"><span class="type">ClutterShaderEffect</span></a>.
262 Use <a href="../gobject/gobject-The-Base-Object-Type.html#g-object-unref"><code class="function">g_object_unref()</code></a> when done. <span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span>
263 </td>
264 </tr>
265 </tbody>
266 </table></div>
267 <p class="since">Since 1.8</p>
268 </div>
269 <hr>
270 <div class="refsect2">
271 <a name="clutter-shader-effect-set-uniform"></a><h3>clutter_shader_effect_set_uniform ()</h3>
272 <pre class="programlisting"><span class="returnvalue">void</span>                clutter_shader_effect_set_uniform   (<em class="parameter"><code><a class="link" href="ClutterShaderEffect.html" title="ClutterShaderEffect"><span class="type">ClutterShaderEffect</span></a> *effect</code></em>,
273                                                          <em class="parameter"><code>const <a href="../glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
274                                                          <em class="parameter"><code><a href="../gobject/gobject-Type-Information.html#GType"><span class="type">GType</span></a> gtype</code></em>,
275                                                          <em class="parameter"><code><a href="../glib/glib-Basic-Types.html#gsize"><span class="type">gsize</span></a> n_values</code></em>,
276                                                          <em class="parameter"><code>...</code></em>);</pre>
277 <p>
278 Sets a list of values as the payload for the uniform <em class="parameter"><code>name</code></em> inside
279 the shader effect
280 </p>
281 <p>
282 The <em class="parameter"><code>gtype</code></em> must be one of: <a href="../gobject/gobject-Type-Information.html#G-TYPE-INT:CAPS"><code class="literal">G_TYPE_INT</code></a>, for 1 or more integer values;
283 <a href="../gobject/gobject-Type-Information.html#G-TYPE-FLOAT:CAPS"><code class="literal">G_TYPE_FLOAT</code></a>, for 1 or more floating point values;
284 <code class="literal">CLUTTER_TYPE_SHADER_INT</code>, for a pointer to an array of integer values;
285 <code class="literal">CLUTTER_TYPE_SHADER_FLOAT</code>, for a pointer to an array of floating point
286 values; and <code class="literal">CLUTTER_TYPE_SHADER_MATRIX</code>, for a pointer to an array of
287 floating point values mapping a matrix
288 </p>
289 <p>
290 The number of values interepreted is defined by the <em class="parameter"><code>n_value</code></em>
291 argument, and by the <em class="parameter"><code>gtype</code></em> argument. For instance, a uniform named
292 "sampler0" and containing a single integer value is set using:
293 </p>
294 <p>
295 </p>
296 <div class="informalexample">
297   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
298     <tbody>
299       <tr>
300         <td class="listing_lines" align="right"><pre>1
301 2
302 3</pre></td>
303         <td class="listing_code"><pre class="programlisting"><span class="function"><a href="ClutterShaderEffect.html#clutter-shader-effect-set-uniform">clutter_shader_effect_set_uniform</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">effect</span><span class="symbol">,</span><span class="normal"> </span><span class="string">"sampler0"</span><span class="symbol">,</span>
304 <span class="normal">                                   <a href="../gobject/gobject-Type-Information.html#G-TYPE-INT:CAPS">G_TYPE_INT</a></span><span class="symbol">,</span><span class="normal"> </span><span class="number">1</span><span class="symbol">,</span>
305 <span class="normal">                                   </span><span class="number">0</span><span class="symbol">);</span></pre></td>
306       </tr>
307     </tbody>
308   </table>
309 </div>
310
311 <p>
312 </p>
313 <p>
314 While a uniform named "components" and containing a 3-elements vector
315 of floating point values (a "vec3") can be set using:
316 </p>
317 <p>
318 </p>
319 <div class="informalexample">
320   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
321     <tbody>
322       <tr>
323         <td class="listing_lines" align="right"><pre>1
324 2
325 3
326 4
327 5
328 6
329 7</pre></td>
330         <td class="listing_code"><pre class="programlisting"><span class="usertype">gfloat</span><span class="normal"> component_r</span><span class="symbol">,</span><span class="normal"> component_g</span><span class="symbol">,</span><span class="normal"> component_b</span><span class="symbol">;</span>
331
332 <span class="function"><a href="ClutterShaderEffect.html#clutter-shader-effect-set-uniform">clutter_shader_effect_set_uniform</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">effect</span><span class="symbol">,</span><span class="normal"> </span><span class="string">"components"</span><span class="symbol">,</span>
333 <span class="normal">                                   <a href="../gobject/gobject-Type-Information.html#G-TYPE-FLOAT:CAPS">G_TYPE_FLOAT</a></span><span class="symbol">,</span><span class="normal"> </span><span class="number">3</span><span class="symbol">,</span>
334 <span class="normal">                                   component_r</span><span class="symbol">,</span>
335 <span class="normal">                                   component_g</span><span class="symbol">,</span>
336 <span class="normal">                                   component_b</span><span class="symbol">);</span></pre></td>
337       </tr>
338     </tbody>
339   </table>
340 </div>
341
342 <p>
343 </p>
344 <p>
345 or can be set using:
346 </p>
347 <p>
348 </p>
349 <div class="informalexample">
350   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
351     <tbody>
352       <tr>
353         <td class="listing_lines" align="right"><pre>1
354 2
355 3
356 4
357 5</pre></td>
358         <td class="listing_code"><pre class="programlisting"><span class="usertype">gfloat</span><span class="normal"> component_vec</span><span class="symbol">[</span><span class="number">3</span><span class="symbol">];</span>
359
360 <span class="function"><a href="ClutterShaderEffect.html#clutter-shader-effect-set-uniform">clutter_shader_effect_set_uniform</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">effect</span><span class="symbol">,</span><span class="normal"> </span><span class="string">"components"</span><span class="symbol">,</span>
361 <span class="normal">                                   CLUTTER_TYPE_SHADER_FLOAT</span><span class="symbol">,</span><span class="normal"> </span><span class="number">3</span><span class="symbol">,</span>
362 <span class="normal">                                   component_vec</span><span class="symbol">);</span></pre></td>
363       </tr>
364     </tbody>
365   </table>
366 </div>
367
368 <p>
369 </p>
370 <p>
371 Finally, a uniform named "map" and containing a matrix can be set using:
372 </p>
373 <p>
374 </p>
375 <div class="informalexample">
376   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
377     <tbody>
378       <tr>
379         <td class="listing_lines" align="right"><pre>1
380 2
381 3</pre></td>
382         <td class="listing_code"><pre class="programlisting"><span class="function"><a href="ClutterShaderEffect.html#clutter-shader-effect-set-uniform">clutter_shader_effect_set_uniform</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">effect</span><span class="symbol">,</span><span class="normal"> </span><span class="string">"map"</span><span class="symbol">,</span>
383 <span class="normal">                                   CLUTTER_TYPE_SHADER_MATRIX</span><span class="symbol">,</span><span class="normal"> </span><span class="number">1</span><span class="symbol">,</span>
384 <span class="normal">                                   </span><span class="function">cogl_matrix_get_array</span><span class="normal"> </span><span class="symbol">(&amp;</span><span class="normal">matrix</span><span class="symbol">));</span></pre></td>
385       </tr>
386     </tbody>
387   </table>
388 </div>
389
390 <p>
391 </p>
392 <div class="variablelist"><table border="0">
393 <col align="left" valign="top">
394 <tbody>
395 <tr>
396 <td><p><span class="term"><em class="parameter"><code>effect</code></em> :</span></p></td>
397 <td>a <a class="link" href="ClutterShaderEffect.html" title="ClutterShaderEffect"><span class="type">ClutterShaderEffect</span></a>
398 </td>
399 </tr>
400 <tr>
401 <td><p><span class="term"><em class="parameter"><code>name</code></em> :</span></p></td>
402 <td>the name of the uniform to set</td>
403 </tr>
404 <tr>
405 <td><p><span class="term"><em class="parameter"><code>gtype</code></em> :</span></p></td>
406 <td>the type of the uniform to set</td>
407 </tr>
408 <tr>
409 <td><p><span class="term"><em class="parameter"><code>n_values</code></em> :</span></p></td>
410 <td>the number of values</td>
411 </tr>
412 <tr>
413 <td><p><span class="term"><em class="parameter"><code>...</code></em> :</span></p></td>
414 <td>a list of values</td>
415 </tr>
416 </tbody>
417 </table></div>
418 <p class="since">Since 1.4</p>
419 </div>
420 <hr>
421 <div class="refsect2">
422 <a name="clutter-shader-effect-set-uniform-value"></a><h3>clutter_shader_effect_set_uniform_value ()</h3>
423 <pre class="programlisting"><span class="returnvalue">void</span>                clutter_shader_effect_set_uniform_value
424                                                         (<em class="parameter"><code><a class="link" href="ClutterShaderEffect.html" title="ClutterShaderEffect"><span class="type">ClutterShaderEffect</span></a> *effect</code></em>,
425                                                          <em class="parameter"><code>const <a href="../glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *name</code></em>,
426                                                          <em class="parameter"><code>const <a href="../gobject/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> *value</code></em>);</pre>
427 <p>
428 Sets <em class="parameter"><code>value</code></em> as the payload for the uniform <em class="parameter"><code>name</code></em> inside the shader
429 effect
430 </p>
431 <p>
432 The <a href="../gobject/gobject-Type-Information.html#GType"><span class="type">GType</span></a> of the <em class="parameter"><code>value</code></em> must be one of: <a href="../gobject/gobject-Type-Information.html#G-TYPE-INT:CAPS"><code class="literal">G_TYPE_INT</code></a>, for a single
433 integer value; <a href="../gobject/gobject-Type-Information.html#G-TYPE-FLOAT:CAPS"><code class="literal">G_TYPE_FLOAT</code></a>, for a single floating point value;
434 <code class="literal">CLUTTER_TYPE_SHADER_INT</code>, for an array of integer values;
435 <code class="literal">CLUTTER_TYPE_SHADER_FLOAT</code>, for an array of floating point values;
436 and <code class="literal">CLUTTER_TYPE_SHADER_MATRIX</code>, for a matrix of floating point
437 values. It also accepts <a href="../gobject/gobject-Type-Information.html#G-TYPE-DOUBLE:CAPS"><code class="literal">G_TYPE_DOUBLE</code></a> for compatibility with other
438 languages than C.
439 </p>
440 <div class="variablelist"><table border="0">
441 <col align="left" valign="top">
442 <tbody>
443 <tr>
444 <td><p><span class="term"><em class="parameter"><code>effect</code></em> :</span></p></td>
445 <td>a <a class="link" href="ClutterShaderEffect.html" title="ClutterShaderEffect"><span class="type">ClutterShaderEffect</span></a>
446 </td>
447 </tr>
448 <tr>
449 <td><p><span class="term"><em class="parameter"><code>name</code></em> :</span></p></td>
450 <td>the name of the uniform to set</td>
451 </tr>
452 <tr>
453 <td><p><span class="term"><em class="parameter"><code>value</code></em> :</span></p></td>
454 <td>a <a href="../gobject/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> with the value of the uniform to set</td>
455 </tr>
456 </tbody>
457 </table></div>
458 <p class="since">Since 1.4</p>
459 </div>
460 <hr>
461 <div class="refsect2">
462 <a name="clutter-shader-effect-set-shader-source"></a><h3>clutter_shader_effect_set_shader_source ()</h3>
463 <pre class="programlisting"><a href="../glib/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            clutter_shader_effect_set_shader_source
464                                                         (<em class="parameter"><code><a class="link" href="ClutterShaderEffect.html" title="ClutterShaderEffect"><span class="type">ClutterShaderEffect</span></a> *effect</code></em>,
465                                                          <em class="parameter"><code>const <a href="../glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *source</code></em>);</pre>
466 <p>
467 Sets the source of the GLSL shader used by <em class="parameter"><code>effect</code></em>
468 </p>
469 <p>
470 This function should only be called by implementations of
471 the <a class="link" href="ClutterShaderEffect.html" title="ClutterShaderEffect"><span class="type">ClutterShaderEffect</span></a> class, and not by application code.
472 </p>
473 <p>
474 This function can only be called once; subsequent calls will
475 yield no result.
476 </p>
477 <div class="variablelist"><table border="0">
478 <col align="left" valign="top">
479 <tbody>
480 <tr>
481 <td><p><span class="term"><em class="parameter"><code>effect</code></em> :</span></p></td>
482 <td>a <a class="link" href="ClutterShaderEffect.html" title="ClutterShaderEffect"><span class="type">ClutterShaderEffect</span></a>
483 </td>
484 </tr>
485 <tr>
486 <td><p><span class="term"><em class="parameter"><code>source</code></em> :</span></p></td>
487 <td>the source of a GLSL shader</td>
488 </tr>
489 <tr>
490 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
491 <td>
492 <a href="../glib/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the source was set</td>
493 </tr>
494 </tbody>
495 </table></div>
496 <p class="since">Since 1.4</p>
497 </div>
498 <hr>
499 <div class="refsect2">
500 <a name="clutter-shader-effect-get-program"></a><h3>clutter_shader_effect_get_program ()</h3>
501 <pre class="programlisting"><span class="returnvalue">CoglHandle</span>          clutter_shader_effect_get_program   (<em class="parameter"><code><a class="link" href="ClutterShaderEffect.html" title="ClutterShaderEffect"><span class="type">ClutterShaderEffect</span></a> *effect</code></em>);</pre>
502 <p>
503 Retrieves a pointer to the program's handle
504 </p>
505 <div class="variablelist"><table border="0">
506 <col align="left" valign="top">
507 <tbody>
508 <tr>
509 <td><p><span class="term"><em class="parameter"><code>effect</code></em> :</span></p></td>
510 <td>a <a class="link" href="ClutterShaderEffect.html" title="ClutterShaderEffect"><span class="type">ClutterShaderEffect</span></a>
511 </td>
512 </tr>
513 <tr>
514 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
515 <td>a pointer to the program's handle,
516 or <code class="literal">COGL_INVALID_HANDLE</code>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
517 </td>
518 </tr>
519 </tbody>
520 </table></div>
521 <p class="since">Since 1.4</p>
522 </div>
523 <hr>
524 <div class="refsect2">
525 <a name="clutter-shader-effect-get-shader"></a><h3>clutter_shader_effect_get_shader ()</h3>
526 <pre class="programlisting"><span class="returnvalue">CoglHandle</span>          clutter_shader_effect_get_shader    (<em class="parameter"><code><a class="link" href="ClutterShaderEffect.html" title="ClutterShaderEffect"><span class="type">ClutterShaderEffect</span></a> *effect</code></em>);</pre>
527 <p>
528 Retrieves a pointer to the shader's handle
529 </p>
530 <div class="variablelist"><table border="0">
531 <col align="left" valign="top">
532 <tbody>
533 <tr>
534 <td><p><span class="term"><em class="parameter"><code>effect</code></em> :</span></p></td>
535 <td>a <a class="link" href="ClutterShaderEffect.html" title="ClutterShaderEffect"><span class="type">ClutterShaderEffect</span></a>
536 </td>
537 </tr>
538 <tr>
539 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
540 <td>a pointer to the shader's handle,
541 or <code class="literal">COGL_INVALID_HANDLE</code>. <span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span>
542 </td>
543 </tr>
544 </tbody>
545 </table></div>
546 <p class="since">Since 1.4</p>
547 </div>
548 </div>
549 <div class="refsect1">
550 <a name="ClutterShaderEffect.property-details"></a><h2>Property Details</h2>
551 <div class="refsect2">
552 <a name="ClutterShaderEffect--shader-type"></a><h3>The <code class="literal">"shader-type"</code> property</h3>
553 <pre class="programlisting">  "shader-type"              <a class="link" href="ClutterShaderEffect.html#ClutterShaderType" title="enum ClutterShaderType"><span class="type">ClutterShaderType</span></a>     : Write / Construct Only</pre>
554 <p>
555 The type of shader that is used by the effect. This property
556 should be set by the constructor of <a class="link" href="ClutterShaderEffect.html" title="ClutterShaderEffect"><span class="type">ClutterShaderEffect</span></a>
557 sub-classes.
558 </p>
559 <p>Default value: CLUTTER_FRAGMENT_SHADER</p>
560 <p class="since">Since 1.4</p>
561 </div>
562 </div>
563 <div class="refsect1">
564 <a name="ClutterShaderEffect.see-also"></a><h2>See Also</h2>
565 <a class="link" href="ClutterEffect.html" title="ClutterEffect"><span class="type">ClutterEffect</span></a>, <a class="link" href="ClutterOffscreenEffect.html" title="ClutterOffscreenEffect"><span class="type">ClutterOffscreenEffect</span></a>
566 </div>
567 </div>
568 <div class="footer">
569 <hr>
570           Generated by GTK-Doc V1.18.1</div>
571 </body>
572 </html>