<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> <title>Irrlicht Engine: irr::video::IShaderConstantSetCallBack Class Reference</title> <link href="doxygen.css" rel="stylesheet" type="text/css"> </head><body> <table class="irrlicht" > <tr valign="middle"> <td><font size="2"><a class="qindex" href="index.html"><font color="#FFFFFF">Home</font></a> | <a class="qindex" href="namespaces.html"><font color="#FFFFFF">Namespaces</font></a> | <a class="qindex" href="hierarchy.html"><font color="#FFFFFF">Hierarchy</font></a> | <a class="qindex" href="classes.html"><font color="#FFFFFF">Alphabetical List</font></a> | <a class="qindex" href="annotated.html"><font color="#FFFFFF"> Class list</font></a> | <a class="qindex" href="files.html"><font color="#FFFFFF">Files</font></a> | <a class="qindex" href="namespacemembers.html"><font color="#FFFFFF"> Namespace Members</font></a> | <a class="qindex" href="functions.html"><font color="#FFFFFF">Class members</font></a> | <a class="qindex" href="globals.html"><font color="#FFFFFF">File members</font></a> | <a class="qindex" href="pages.html"><font color="#FFFFFF">Tutorials</font></a></font> </td> </tr> </table> <!-- Generated by Doxygen 1.5.6 --> <div class="navpath"><a class="el" href="namespaceirr.html">irr</a>::<a class="el" href="namespaceirr_1_1video.html">video</a>::<a class="el" href="classirr_1_1video_1_1_i_shader_constant_set_call_back.html">IShaderConstantSetCallBack</a> </div> <div class="contents"> <h1>irr::video::IShaderConstantSetCallBack Class Reference</h1><!-- doxytag: class="irr::video::IShaderConstantSetCallBack" --><!-- doxytag: inherits="irr::IReferenceCounted" -->Interface making it possible to set constants for gpu programs every frame. <a href="#_details">More...</a> <p> <code>#include <<a class="el" href="_i_shader_constant_set_call_back_8h-source.html">IShaderConstantSetCallBack.h</a>></code> <p> <div class="dynheader"> Inheritance diagram for irr::video::IShaderConstantSetCallBack:</div> <div class="dynsection"> <p><center><img src="classirr_1_1video_1_1_i_shader_constant_set_call_back.png" usemap="#irr::video::IShaderConstantSetCallBack_map" border="0" alt=""></center> <map name="irr::video::IShaderConstantSetCallBack_map"> <area href="classirr_1_1_i_reference_counted.html" alt="irr::IReferenceCounted" shape="rect" coords="0,0,229,24"> </map> </div> <p> <a href="classirr_1_1video_1_1_i_shader_constant_set_call_back-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0"> <tr><td></td></tr> <tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classirr_1_1video_1_1_i_shader_constant_set_call_back.html#91cf4eb8d20d278defaca4e3c9390396">OnSetConstants</a> (<a class="el" href="classirr_1_1video_1_1_i_material_renderer_services.html">IMaterialRendererServices</a> *services, <a class="el" href="namespaceirr.html#c66849b7a6ed16e30ebede579f9b47c6">s32</a> userData)=0</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Called by the engine when the vertex and/or pixel shader constants for an material renderer should be set. <a href="#91cf4eb8d20d278defaca4e3c9390396"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classirr_1_1video_1_1_i_shader_constant_set_call_back.html#837ad9419ca4c17b011af75bb24e7a72">OnSetMaterial</a> (const <a class="el" href="classirr_1_1video_1_1_s_material.html">SMaterial</a> &material)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Called to let the callBack know the used material (optional method). <a href="#837ad9419ca4c17b011af75bb24e7a72"></a><br></td></tr> </table> <hr><a name="_details"></a><h2>Detailed Description</h2> Interface making it possible to set constants for gpu programs every frame. <p> Implement this interface in an own class and pass a pointer to it to one of the methods in <a class="el" href="classirr_1_1video_1_1_i_g_p_u_programming_services.html" title="Interface making it possible to create and use programs running on the GPU.">IGPUProgrammingServices</a> when creating a shader. The OnSetConstants method will be called every frame now. <p>Definition at line <a class="el" href="_i_shader_constant_set_call_back_8h-source.html#l00020">20</a> of file <a class="el" href="_i_shader_constant_set_call_back_8h-source.html">IShaderConstantSetCallBack.h</a>.</p> <hr><h2>Member Function Documentation</h2> <a class="anchor" name="91cf4eb8d20d278defaca4e3c9390396"></a><!-- doxytag: member="irr::video::IShaderConstantSetCallBack::OnSetConstants" ref="91cf4eb8d20d278defaca4e3c9390396" args="(IMaterialRendererServices *services, s32 userData)=0" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">virtual void irr::video::IShaderConstantSetCallBack::OnSetConstants </td> <td>(</td> <td class="paramtype"><a class="el" href="classirr_1_1video_1_1_i_material_renderer_services.html">IMaterialRendererServices</a> * </td> <td class="paramname"> <em>services</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="namespaceirr.html#c66849b7a6ed16e30ebede579f9b47c6">s32</a> </td> <td class="paramname"> <em>userData</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td><code> [pure virtual]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Called by the engine when the vertex and/or pixel shader constants for an material renderer should be set. <p> Implement the <a class="el" href="classirr_1_1video_1_1_i_shader_constant_set_call_back.html" title="Interface making it possible to set constants for gpu programs every frame.">IShaderConstantSetCallBack</a> in an own class and implement your own OnSetConstants method using the given <a class="el" href="classirr_1_1video_1_1_i_material_renderer_services.html" title="Interface providing some methods for changing advanced, internal states of a IVideoDriver...">IMaterialRendererServices</a> interface. Pass a pointer to this class to one of the methods in <a class="el" href="classirr_1_1video_1_1_i_g_p_u_programming_services.html" title="Interface making it possible to create and use programs running on the GPU.">IGPUProgrammingServices</a> when creating a shader. The OnSetConstants method will now be called every time before geometry is being drawn using your shader material. A sample implementation would look like this: <div class="fragment"><pre class="fragment"> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classirr_1_1video_1_1_i_shader_constant_set_call_back.html#91cf4eb8d20d278defaca4e3c9390396" title="Called by the engine when the vertex and/or pixel shader constants for an material...">OnSetConstants</a>(video::IMaterialRendererServices* services, <a class="code" href="namespaceirr.html#c66849b7a6ed16e30ebede579f9b47c6" title="32 bit signed variable.">s32</a> userData) { video::IVideoDriver* driver = services->getVideoDriver(); <span class="comment">// set clip matrix at register 4</span> <a class="code" href="namespaceirr_1_1core.html#73fa92e638c5ca97efd72da307cc9b65" title="Typedef for f32 matrix.">core::matrix4</a> worldViewProj(driver->getTransform(<a class="code" href="namespaceirr_1_1video.html#15b57657a320243be03ae6f66fcff43de7ec186418508c67a7562af012d7b63f" title="Projection transformation.">video::ETS_PROJECTION</a>)); worldViewProj *= driver->getTransform(<a class="code" href="namespaceirr_1_1video.html#15b57657a320243be03ae6f66fcff43d152f4262d5874186e0288934c7d31e14" title="View transformation.">video::ETS_VIEW</a>); worldViewProj *= driver->getTransform(<a class="code" href="namespaceirr_1_1video.html#15b57657a320243be03ae6f66fcff43d843cf42adb3fa9caf61c9e228cf14e85" title="World transformation.">video::ETS_WORLD</a>); services->setVertexShaderConstant(&worldViewProj.M[0], 4, 4); <span class="comment">// for high level shading languages, this would be another solution:</span> <span class="comment">//services->setVertexShaderConstant("mWorldViewProj", worldViewProj.M, 16);</span> <span class="comment">// set some light color at register 9</span> video::SColorf col(0.0f,1.0f,1.0f,0.0f); services->setVertexShaderConstant(reinterpret_cast<const f32*>(&col), 9, 1); <span class="comment">// for high level shading languages, this would be another solution:</span> <span class="comment">//services->setVertexShaderConstant("myColor", reinterpret_cast<f32*>(&col), 4);</span> } </pre></div> <dl compact><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>services,:</em> </td><td>Pointer to an interface providing methods to set the constants for the shader. </td></tr> <tr><td valign="top"></td><td valign="top"><em>userData,:</em> </td><td>Userdata int which can be specified when creating the shader. </td></tr> </table> </dl> </div> </div><p> <a class="anchor" name="837ad9419ca4c17b011af75bb24e7a72"></a><!-- doxytag: member="irr::video::IShaderConstantSetCallBack::OnSetMaterial" ref="837ad9419ca4c17b011af75bb24e7a72" args="(const SMaterial &material)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">virtual void irr::video::IShaderConstantSetCallBack::OnSetMaterial </td> <td>(</td> <td class="paramtype">const <a class="el" href="classirr_1_1video_1_1_s_material.html">SMaterial</a> & </td> <td class="paramname"> <em>material</em> </td> <td> ) </td> <td><code> [inline, virtual]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Called to let the callBack know the used material (optional method). <p> <div class="fragment"><pre class="fragment"> <span class="keyword">class </span>MyCallBack : <span class="keyword">public</span> IShaderConstantSetCallBack { <span class="keyword">const</span> video::SMaterial *UsedMaterial; <a class="code" href="classirr_1_1video_1_1_i_shader_constant_set_call_back.html#837ad9419ca4c17b011af75bb24e7a72" title="Called to let the callBack know the used material (optional method).">OnSetMaterial</a>(<span class="keyword">const</span> video::SMaterial& material) { UsedMaterial=&material; } <a class="code" href="classirr_1_1video_1_1_i_shader_constant_set_call_back.html#91cf4eb8d20d278defaca4e3c9390396" title="Called by the engine when the vertex and/or pixel shader constants for an material...">OnSetConstants</a>(IMaterialRendererServices* services, <a class="code" href="namespaceirr.html#c66849b7a6ed16e30ebede579f9b47c6" title="32 bit signed variable.">s32</a> userData) { services->setVertexShaderConstant(<span class="stringliteral">"myColor"</span>, reinterpret_cast<f32*>(&UsedMaterial->color), 4); } } </pre></div> <p>Definition at line <a class="el" href="_i_shader_constant_set_call_back_8h-source.html#l00043">43</a> of file <a class="el" href="_i_shader_constant_set_call_back_8h-source.html">IShaderConstantSetCallBack.h</a>.</p> </div> </div><p> <hr>The documentation for this class was generated from the following file:<ul> <li><a class="el" href="_i_shader_constant_set_call_back_8h-source.html">IShaderConstantSetCallBack.h</a></ul> </div> <hr size="1"> <address style="align: right;"> <small> </small> </address> <table width="100%" border="0" cellspacing="0" cellpadding="2"> <tr> <td width="0"> <div align="left"><small><a href="http://irrlicht.sourceforge.net" target="_blank"><img src="irrlicht.png" alt="The Irrlicht Engine" align="middle" border=0 width=88 height=31></a></small></div></td> <td> <div align="left"><small><em><font size="2">The <a href="http://irrlicht.sourceforge.net" target="_blank">Irrlicht Engine</a> Documentation © 2003-2009 by Nikolaus Gebhardt. Generated on Sun Jan 10 09:24:19 2010 by <a href="http://www.doxygen.org" target="_blank">Doxygen</a> (1.5.6)</font></em></small></div></td> </tr> </table> <address style="align: right;"> </address> </body> </html>