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.
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 |
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]; ... } ... }