###############################################
Adding a Shader Parameter to a Rendering Shader
###############################################

.. code:: cpp 

    // shader is a custom RED::RenderShader added to a RED::MTL_PRELIT pass. Hence the RED_L0 parameter.
    // param1 is a float parameter named "parameter1" for the vertex shader program.
    RED::RenderShaderParameter param1( "parameter1", 0, RED::RenderShaderParameter::VSH );
    param1.SetValue( 10.0 );
    RC_TEST( shader.AddParameter( param1, RED_L0 ) );

    // param2 is a color parameter named "parameter2" for the pixel shader program.
    RED::RenderShaderParameter param2( "parameter2", 1, RED::RenderShaderParameter::PSH );
    param2.SetValue( RED::Color( 1.0, 0.0, 0.0, 1.0 ) );
    RC_TEST( shader.AddParameter( param2, RED_L0 ) );

In this sample code, two parameters are added to a custom ``RED::RenderShader``. The render shader is added to the ``RED::MTL_PRELIT`` pass of a material, hence the ``RED_L0`` parameter.

The first parameter is of type double and is intended for the vertex shader: ``RED::RenderShaderParameter::VSH``.

The second parameter is of type ``RED::Color`` and is intended for the pixel shader: ``RED::RenderShaderParameter::PSH``.

By calling the appropriate ``RED::RenderShaderParameter::SetValue`` method, the parameter type ``RED::RenderShaderParameter::TYPE`` is automatically set.

.. code:: cpp 

    // paramshadow is a reference to the shadow image texture. 
    // It is named "shadowimage" and is intended for the pixel shader program.
    // It targets the generic hardware platform and the software platform.
    RED::RenderShaderParameter paramshadow( "shadowimage", 0, RED::RenderShaderParameter::PSH );
    paramshadow.SetReference( RED::RenderShaderParameter::REF_LIGHT_SHADOW_IMAGE_TEX );
    RC_TEST( shader.AddParameter( paramshadow, RED_LALL ) );
    RC_TEST( shader.AddParameter( paramshadow, RED_LALL, RED::HW_SOFT_TRACER ) );

In the previous example, the shader is added to the ``RED::MTL_LIT`` pass of a material. The ``RED_LALL`` parameter indicates that we focus on accessing parameters from any kind of light.

The parameter added is a reference to the shadow image (``RED::RenderShaderParameter::REF_LIGHT_SHADOW_IMAGE_TEX``). It targets the ``RED::HW_GENERIC`` platform by default and the ``RED::HW_SOFT_TRACER`` target for software rendering. 