Irrlicht Engine: irr::video::IShaderConstantSetCallBack Class Reference

Home | Namespaces | Hierarchy | Alphabetical List | Class list | Files | Namespace Members | Class members | File members | Tutorials

# irr::video::IShaderConstantSetCallBack Class Reference

Interface making it possible to set constants for gpu programs every frame. More...

`#include <IShaderConstantSetCallBack.h>`

Inheritance diagram for irr::video::IShaderConstantSetCallBack:

List of all members.

## Public Member Functions
virtual void | OnSetConstants (IMaterialRendererServices *services, s32 userData)=0
| Called by the engine when the vertex and/or pixel shader constants for an material renderer should be set.
virtual void | OnSetMaterial (const SMaterial &material)
| Called to let the callBack know the used material (optional method).

## Detailed Description

Interface making it possible to set constants for gpu programs every frame.

Implement this interface in an own class and pass a pointer to it to one of the methods in IGPUProgrammingServices when creating a shader. The OnSetConstants method will be called every frame now.

Definition at line 20 of file IShaderConstantSetCallBack.h.

## Member Function Documentation

virtual void irr::video::IShaderConstantSetCallBack::OnSetConstants | ( | IMaterialRendererServices * | services,
|  | s32 | userData |
| ) |  |  | `[pure virtual]`

Called by the engine when the vertex and/or pixel shader constants for an material renderer should be set.

Implement the IShaderConstantSetCallBack in an own class and implement your own OnSetConstants method using the given IMaterialRendererServices interface. Pass a pointer to this class to one of the methods in IGPUProgrammingServices 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:

            virtual void OnSetConstants(video::IMaterialRendererServices* services, s32 userData)
            {
                    video::IVideoDriver* driver = services->getVideoDriver();

                    // set clip matrix at register 4
                    core::matrix4 worldViewProj(driver->getTransform(video::ETS_PROJECTION));
                    worldViewProj *= driver->getTransform(video::ETS_VIEW);
                    worldViewProj *= driver->getTransform(video::ETS_WORLD);
                    services->setVertexShaderConstant(&worldViewProj.M[0], 4, 4);
                    // for high level shading languages, this would be another solution:
                    //services->setVertexShaderConstant("mWorldViewProj", worldViewProj.M, 16);

                    // set some light color at register 9
                    video::SColorf col(0.0f,1.0f,1.0f,0.0f);
                    services->setVertexShaderConstant(reinterpret_cast<const f32*>(&col), 9, 1);
                    // for high level shading languages, this would be another solution:
                    //services->setVertexShaderConstant("myColor", reinterpret_cast<f32*>(&col), 4);
            }

Parameters:

  | services,: | Pointer to an interface providing methods to set the constants for the shader.
  | userData,: | Userdata int which can be specified when creating the shader.

virtual void irr::video::IShaderConstantSetCallBack::OnSetMaterial | ( | const SMaterial & | material | ) | `[inline, virtual]`

Called to let the callBack know the used material (optional method).

            class MyCallBack : public IShaderConstantSetCallBack
            {
                    const video::SMaterial *UsedMaterial;

                    OnSetMaterial(const video::SMaterial& material)
                    {
                            UsedMaterial=&material;
                    }

                    OnSetConstants(IMaterialRendererServices* services, s32 userData)
                    {
                            services->setVertexShaderConstant("myColor", reinterpret_cast<f32*>(&UsedMaterial->color), 4);
                    }
            }

Definition at line 43 of file IShaderConstantSetCallBack.h.

The documentation for this class was generated from the following file:

- IShaderConstantSetCallBack.h

| The Irrlicht Engine Documentation © 2003-2010 by Nikolaus Gebhardt. Generated on Sun Oct 24 12:42:09 2010 by Doxygen (1.6.2)