Execute Callback Reference

        RTSHADER_API bool (*RTS_Shader3_Execute)
        {
            IRTSExecutionState          *in_pExecState,
            void                        *in_pParams,
            XSI_RTS_Primitive           *in_pPrimitive,
            void                        *in_pAttributes,
            XSI_RTS_Attribute_Size      *in_pAttributesSize,
            void                        **io_pShaderInstanceData
        }

Once the shader has responded to GetAttributeList with its list of attributes, Softimage will module the values for these attributes and will pass them to the `Execute` function along with an array describing each attribute's size and format. Note that if an attribute was not found or was not defined on the mesh or point cloud, Softimage will pass a null pointer.

Note:
  This callback is mandatory

Parameters:

  in_pExecState | The execution state interface
  in_pParams | The shader property page parameters
  in_pPrimitive | The geometry information
  in_pAttributes | The Softimage RTS Attribute data
  in_pAttributesSize | The sizes of the attributes
  io_pShaderInstanceData | Pointer to This shader instance user data

Returns:
  Success/failure

Example:
  This example builds on the one on the GetAttributeList page. Here's what the Execute function might look like for the example shader described:

          RTSHADER_API bool MyShader_Execute
          (
              IRTSExecutionState      *in_pExecState,
              void                    *in_pParams,
              XSI_RTS_Primitive       *in_pPrimitive,
              void                    *in_pAttributes,
              eXSI_Attribute_Size     *in_pAttributesSize,
              void                    **io_pInstanceData
          )
          {
              ShaderPPG* options = (ShaderPPG*)in_pParams;

              if (options->useColor)
              {
                  float* pfPositions  = ((float**)in_pAttributes)[0];
                  float* pfNormals    = ((float**)in_pAttributes)[1];
                  float* pfColors0    = ((float**)in_pAttributes)[2];
                  float* pfColors1    = ((float**)in_pAttributes)[3];
                  float* pfFoobars    = ((float**)in_pAttributes)[4];
                  ...
              } else {
                  float* pfPositions  = ((float**)in_pAttributes)[0];
                  float* pfNormals    = ((float**)in_pAttributes)[1];
                  float* pfFoobars    = ((float**)in_pAttributes)[2];
                  ...
              }

              ...
          }

See also:
  IRTSExecutionState, Realtime Shader Callbacks, cus_rtshad_GeometryData Geometry Data , cus_rtshad_ExecutionFlow Execution Flow