...
All shading plugins are expected to return a description of their input and output parameters via the GetParamTable()
method. This returns a pointer to an array of RixSCParamInfo
, containing one entry for each input and output parameter, as well as an extra empty entry to mark the end of the table. This parameter table is used by the renderer to ensure proper type checking and validate the connections of upstream and downstream nodes. As such, each entry in the table should set a name, a type (RixSCType
enumeration), detail (varying vs uniform, RixSCDetail
enumeration), and access (input vs output, RixSCAccess
enumeration). These table entries These declarations also need to be kept in sync with the associated .args file.
For an example of usage, consider a pattern plugin which returns a color. The resultC output parameter is a color, so it is defined in the parameter table as:
RixSCParamInfo("resultC", k_RixSCColor, k_RixSCOutput)
A float input parameter named density can be defined as:
RixSCParamInfo("density", k_RixSCFloat)
While a float[16] input parameter named placementMatrix can be defined as:
RixSCParamInfo("placementMatrix", k_RixSCFloat, k_RixSCInput, 16)
The full implementation of GetParamTable()
for this plugin would look something like this:
RixSCParamInfo const *
MyPattern::GetParamTable()
{
static RixSCParamInfo s_ptable[] =
{
// outputs
RixSCParamInfo("resultC", k_RixSCColor, k_RixSCOutput),
// inputs
RixSCParamInfo("density", k_RixSCFloat),
RixSCParamInfo("placementMatrix", k_RixSCFloat, k_RixSCInput, 16)
RixSCParamInfo(), // end of table
};
return &s_ptable[0];
}
The ordinal position of a parameter in the parameter table is the integer paramId
used to evaluate parameter inputs using the RixShadingContext::EvalParam
method; see RixShadingContext
for more information.. Because these need to be kept in sync, it is recommended that you create a parameter enumeration to keep track of the order that your parameters were created in the table. The enumeration can be used later on when calling RixShadingContext::EvalParam
in the body of the shader. Following the three parameter table entries above:
enum paramId
{
k_resultC=0, // output
k_density,
k_placementMatrix,
k_numParams
};
Anchor | ||||
---|---|---|---|---|
|
...