To define the user interface of a realtime shader, create a SPDL file. You can create it by hand or you can use the shader wizard that comes with the Softimage SDK (right-click on the SPDLs folder in the Softimage Plugins Tree and choose New > Shader from the context menu).
![]()
|
On the Shader Information tab, there are three settings specific to Realtime shaders: • Set the Main Group to Realtime. A new checkbox and a new text box appear. • When you enable the Generate Drawing Code option, the wizard writes a call to the IRTSExecutionState::DrawGeometry function inside the Execute callback. • You can optionally specify a prefix to be used in the callback functions the wizard writes in the C++ Callback Prefix box. By default, this box is populated with the name of the shader followed by _cb (for example myshader_cb). |
Example of a SPDL file generated by the wizard:
# SPDL Generated by Softimage Shader Wizard
SPDL
Version = "2.0.0.0";
Reference = "{BDFA8D12-898F-4EA3-8697-35998888131D}";
PropertySet "Halo_pset"
{
Parameter "out" output
{
GUID = "{2CF07A36-819E-4F74-8274-26E63E8026D5}";
Type = rtrendercontext;
}
Parameter "Halo" input
{
Title = "Halo";
GUID = "{72A82046-0D2B-4F06-BE8F-C3B8C09349BC}";
Type = string;
Value = "Halo";
Inspectable = off;
}
Parameter "Halo" input
{
GUID = "{4EEC3CBD-3B8A-4B86-9D0C-EC23E1777FB1}";
Type = string;
Value = "Halo";
Inspectable = off;
}
Parameter "previous" input
{
GUID = "{8523985F-A961-4B01-9179-AA32224CE3E5}";
Type = rtrendercontext;
Texturable = on;
}
Parameter "inner_ring" input
{
GUID = "{E15724EF-4A13-403C-BDEB-FEE3930DB03E}";
Type = scalar;
Value = 1.0;
}
Parameter "outer_ring" input
{
GUID = "{E5FA4D50-C71A-4CFB-BB5C-C252850C1598}";
Type = scalar;
Value = 1.1;
}
Parameter "color" input
{
GUID = "{2BC32197-E76A-4B56-BFEA-761E9C552DD3}";
Type = color;
Value = 1.0 0.0 0.0 0.5;
}
Parameter "tex" input
{
GUID = "{4C03FB2C-67C0-481B-8A07-C7E5172E165E}";
Type = texture;
}
}
MetaShader "Halo_meta"
{
Name = "Halo Shader";
Type = rtrendercontext;
Renderer "realtime"
{
Name = "Halo";
FileName = "Halo";
}
}
Defaults
{
inner_ring
{
Name = "inner_ring";
}
outer_ring
{
Name = "outer_ring";
}
color
{
Name = "color";
UIType = "rgba";
}
tex
{
Name = "tex";
}
}
Layout "Default"
{
Row
{
inner_ring;
outer_ring;
}
Row
{
tex;
}
Row
{
color;
}
}
Plugin = Shader
{
FileName = "Halo";
}Example of the source file generated by the shader wizard
// C++ Source Code Generated by Softimage Shader Wizard //////////////////////////////////////////////////////////////// // Includes #ifdef _WIN32 #define WIN32_LEAN_AND_MEAN #include <windows.h> #endif #define SHADERS_EXPORTS #include <XSI_rtshaders.h> #include "Halo.h" // Default list of vertex attributes. // Add or remove attributes to suit your shader XSI_RTS_Attribute g_HaloAttribs[] = { XSI_RTS_ATTRIBUTE_POSITION, ePOSITION, XSI_RTS_ATTRIBUTE_NORMAL, eNORMAL, XSI_RTS_ATTRIBUTE_COLOR , eCOLOR0, XSI_RTS_ATTRIBUTE_COLOR , eCOLOR1, XSI_RTS_ATTRIBUTE_TEXUVW , eTEXCOORD0, XSI_RTS_ATTRIBUTE_TEXUVW , eTEXCOORD1, XSI_RTS_ATTRIBUTE_TEXUVW , eTEXCOORD2, XSI_RTS_ATTRIBUTE_TEXUVW , eTEXCOORD3, XSI_RTS_ATTRIBUTE_TEXUVW , eTEXCOORD4, XSI_RTS_ATTRIBUTE_TEXUVW , eTEXCOORD5, XSI_RTS_ATTRIBUTE_TEXUVW , eTEXCOORD6, XSI_RTS_ATTRIBUTE_TEXUVW , eTEXCOORD7, NULL }; //////////////////////////////////////////////////////////////// // Implementation extern "C" RTSHADER_API ULONG RTS_GetVersion() { return XSI_RTSHADER_VERSION; } // Main extern "C" RTSHADER_API bool Halo_Execute ( IRTSExecutionState *in_pExecState, //! The execute state Halo_t *in_pParams, // The property page parameters XSI_RTS_Primitive *in_pPrimitive, // The geometry information void *in_pAttributes, // The attribute data XSI_RTS_Attribute_Size *in_pAttributesSize, // the sizes void **io_pInstanceData // The shader instance data ) { // TODO: Drawing or state manipulation code goes here. in_pExecState->DrawGeometry ( OpenGL, in_pPrimitive, g_HaloAttribs, in_pAttributes, in_pAttributesSize ); return( true ); } extern "C" RTSHADER_API bool Halo_Init ( IRTSExecutionState *in_pExecState, //! The execute state Halo_t *in_pParams, // The property page parameters void **io_pShaderInstanceData //! The shader instance data ) { // TODO: Initialisation code goes here. return( true ); } extern "C" RTSHADER_API bool Halo_Term ( IRTSExecutionState *in_pExecState, //! The execute state Halo_t *in_pParams, // The property page parameters void **io_pShaderInstanceData //! The shader instance data ) { // TODO: Termination code goes here. return( true ); } extern "C" RTSHADER_API XSI_RTS_Attribute* Halo_GetAttributeList ( IRTSExecutionState *in_pExecState, //! The execute state Halo_t *in_pParams, // The property page parameters void **io_pShaderInstanceData //! The shader instance data ) { return( g_HaloAttribs ); } extern "C" RTSHADER_API bool Halo_GetRequirements ( IRTSExecutionState *in_pExecState, //! The execute state Halo_t *in_pParams, // The property page parameters XSI_RTS_Primitive *in_pGeom, //! The geometry information void **io_pShaderInstanceData, //! The shader instance data ULONG in_lFlag, //! The flag to check ULONG *out_pValue //! The returned value ) { (*out_pValue) = 0; return false; }
Autodesk Softimage v7.5