LCOV - code coverage report
Current view: top level - usr/include/irrlicht - IShaderConstantSetCallBack.h (source / functions) Hit Total Coverage
Test: report Lines: 2 2 100.0 %
Date: 2015-07-11 18:23:49 Functions: 2 3 66.7 %

          Line data    Source code
       1             : // Copyright (C) 2002-2012 Nikolaus Gebhardt
       2             : // This file is part of the "Irrlicht Engine".
       3             : // For conditions of distribution and use, see copyright notice in irrlicht.h
       4             : 
       5             : #ifndef __I_SHADER_CONSTANT_SET_CALLBACT_H_INCLUDED__
       6             : #define __I_SHADER_CONSTANT_SET_CALLBACT_H_INCLUDED__
       7             : 
       8             : #include "IReferenceCounted.h"
       9             : 
      10             : namespace irr
      11             : {
      12             : namespace video
      13             : {
      14             :         class IMaterialRendererServices;
      15             :         class SMaterial;
      16             : 
      17             : //! Interface making it possible to set constants for gpu programs every frame.
      18             : /** Implement this interface in an own class and pass a pointer to it to one of
      19             : the methods in IGPUProgrammingServices when creating a shader. The
      20             : OnSetConstants method will be called every frame now. */
      21           1 : class IShaderConstantSetCallBack : public virtual IReferenceCounted
      22             : {
      23             : public:
      24             : 
      25             :         //! Called to let the callBack know the used material (optional method)
      26             :         /**
      27             :          \code
      28             :         class MyCallBack : public IShaderConstantSetCallBack
      29             :         {
      30             :                 const video::SMaterial *UsedMaterial;
      31             : 
      32             :                 OnSetMaterial(const video::SMaterial& material)
      33             :                 {
      34             :                         UsedMaterial=&material;
      35             :                 }
      36             : 
      37             :                 OnSetConstants(IMaterialRendererServices* services, s32 userData)
      38             :                 {
      39             :                         services->setVertexShaderConstant("myColor", reinterpret_cast<f32*>(&UsedMaterial->color), 4);
      40             :                 }
      41             :         }
      42             :         \endcode
      43             :         */
      44      264413 :         virtual void OnSetMaterial(const SMaterial& material) { }
      45             : 
      46             :         //! Called by the engine when the vertex and/or pixel shader constants for an material renderer should be set.
      47             :         /**
      48             :         Implement the IShaderConstantSetCallBack in an own class and implement your own
      49             :         OnSetConstants method using the given IMaterialRendererServices interface.
      50             :         Pass a pointer to this class to one of the methods in IGPUProgrammingServices
      51             :         when creating a shader. The OnSetConstants method will now be called every time
      52             :         before geometry is being drawn using your shader material. A sample implementation
      53             :         would look like this:
      54             :         \code
      55             :         virtual void OnSetConstants(video::IMaterialRendererServices* services, s32 userData)
      56             :         {
      57             :                 video::IVideoDriver* driver = services->getVideoDriver();
      58             : 
      59             :                 // set clip matrix at register 4
      60             :                 core::matrix4 worldViewProj(driver->getTransform(video::ETS_PROJECTION));
      61             :                 worldViewProj *= driver->getTransform(video::ETS_VIEW);
      62             :                 worldViewProj *= driver->getTransform(video::ETS_WORLD);
      63             :                 services->setVertexShaderConstant(&worldViewProj.M[0], 4, 4);
      64             :                 // for high level shading languages, this would be another solution:
      65             :                 //services->setVertexShaderConstant("mWorldViewProj", worldViewProj.M, 16);
      66             : 
      67             :                 // set some light color at register 9
      68             :                 video::SColorf col(0.0f,1.0f,1.0f,0.0f);
      69             :                 services->setVertexShaderConstant(reinterpret_cast<const f32*>(&col), 9, 1);
      70             :                 // for high level shading languages, this would be another solution:
      71             :                 //services->setVertexShaderConstant("myColor", reinterpret_cast<f32*>(&col), 4);
      72             :         }
      73             :         \endcode
      74             :         \param services: Pointer to an interface providing methods to set the constants for the shader.
      75             :         \param userData: Userdata int which can be specified when creating the shader.
      76             :         */
      77             :         virtual void OnSetConstants(IMaterialRendererServices* services, s32 userData) = 0;
      78             : };
      79             : 
      80             : 
      81             : } // end namespace video
      82             : } // end namespace irr
      83             : 
      84             : #endif
      85             : 

Generated by: LCOV version 1.11