Object Hierarchy | Related C++ Class: ShaderArrayParamDef
ShaderArrayParamDef
v9.0 (2011)
ICE Shaders
This object represents a definition for a ShaderArrayParameter instance. It
allows you to set and get the array elements contained by this
shader parameter (ShaderArrayParamDef.ItemInitialValues,
which returns a ValueMap object that
you can populate or query).
To create a ShaderArrayParamDef object, use the ShaderParamDefContainer.AddArrayParamDef
method when adding a new parameter definition to the shader
parameter definition container.
/* This example demonstrates how to create a dynamic shader definition with an input array parameter and then populate the array using the ValueMap object created via the ItemInitialValues property. */ app = Application; app.NewScene("", false); var oShaderDef = XSIFactory.CreateShaderDef("MyParser", "MyArrayDemo", 1, 0); oShaderDef.AddShaderFamily(siShaderFamilyTexture); app.LogMessage("Shader definition name: " + oShaderDef.Name); // Set up shader parameter definition options to use with new input parameter oShaderInParamDefOptions = XSIFactory.CreateShaderParamDefOptions(); oShaderInParamDefOptions.SetAnimatable(false); oShaderInParamDefOptions.SetTexturable(true); oShaderInParamDefOptions.SetInspectable(true); oShaderInParamDefOptions.SetShortName("Fluffy Bunnies"); // Add input parameter to definition oInputParams = oShaderDef.InputParamDefs; var oArrayParamDef = oInputParams.AddArrayParamDef("flurry", siScalarParameterType, oShaderInParamDefOptions); // Make it an array of 6 items and populate the array via the ValueMap interface oArrayParamDef.ItemInitialCount = 6; var oValueMap = oArrayParamDef.ItemInitialValues; oValueMap.Set("a", 0); oValueMap.Set("b", 8); oValueMap.Set("c", 16); oValueMap.Set("d", 32); oValueMap.Set("e", 64); oValueMap.Set("f", 128); // Now print info to see what we have for (var i=0; i<oShaderDef.InputParamDefs.Definitions.Count; i++) { LogParamInfo("\t", oShaderDef.InputParamDefs.Definitions.Item(i)); } // INFO : Shader definition name: MyParser.MyArrayDemo.1.0 // INFO : Parameter name: Fluffy Bunnies // INFO : ClassName: ShaderArrayParamDef // INFO : Family: 65 // INFO : Yes, I'm an array! // INFO : I'm an INPUT parameter // INFO : Parameter name: Item // INFO : ClassName: ShaderStructParamDef // INFO : Family: 3 // INFO : I'm an INPUT parameter // INFO : ItemName: Item // INFO : ItemInitialCount: 6 // INFO : ItemInitialValues: // INFO : Names: a, b, c, d, e, f // INFO : Values: 0, 8, 16, 32, 64, 128 // Convenience function to log info iteratively function LogParamInfo( in_indent, in_paramdef ) { app.LogMessage(in_indent + "Parameter name: " + in_paramdef.DisplayName); app.LogMessage(in_indent + "ClassName: " + app.ClassName(in_paramdef)); app.LogMessage(in_indent + "Family: " + in_paramdef.DataType); if (in_paramdef.IsArray) { app.LogMessage(in_indent + "Yes, I'm an array!"); } if (in_paramdef.IsInput) { app.LogMessage(in_indent + "I'm an INPUT parameter"); } if (in_paramdef.IsOutput) { app.LogMessage(in_indent + "I'm an OUTPUT parameter"); } if (in_paramdef.DataType == siShaderDataTypeArray) { LogParamInfo(in_indent + "\t", in_paramdef.ItemDef); in_indent += "\t"; app.LogMessage(in_indent + "ItemName: " + in_paramdef.ItemName); if (in_paramdef.StaticArray) { app.LogMessage(in_indent + "Is a Static Array"); } app.LogMessage(in_indent + "ItemInitialCount: " + in_paramdef.ItemInitialCount); if (in_paramdef.ItemInitialCount) { app.LogMessage(in_indent + "ItemInitialValues: "); var vbaInitNames = new VBArray(in_paramdef.ItemInitialValues.Names); var aInitNames = vbaInitNames.toArray(); var vbaInitValues = new VBArray(in_paramdef.ItemInitialValues.Values); var aInitValues = vbaInitValues.toArray(); app.LogMessage(in_indent + "\tNames: " + aInitNames.join(", ")); app.LogMessage(in_indent + "\tValues: " + aInitValues.join(", ")); } } } |