Irrlicht 3D Engine
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


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 21 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 44 of file IShaderConstantSetCallBack.h.


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