Object Hierarchy | 関連する C++クラス:ShaderArrayParamDef
ShaderArrayParamDef
v9.0 (2011)
 このオブジェクトはShaderArrayParameterインスタンスの定義を表します。このシェーダパラメータに含まれる配列要素を設定および取得できます(ShaderArrayParamDef.ItemInitialValuesが戻すValueMapオブジェクトを使用して設定または取得します)。
ShaderArrayParamDef オブジェクトを作成するには、新しいパラメータ定義をシェーダパラメータ定義コンテナに追加するときにShaderParamDefContainer.AddArrayParamDefメソッドを使用します。
/* 
	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(", "));
		}
	}
} |