パラメータ定義は、ShaderParamDefContainer または ShaderParamDefContainer として表される特別なコンテナに保存されます。ShaderDef または ShaderDef には、入力パラメータ定義用の ShaderParamDefContainer が 1 つと、出力用にもう 1 つあります。また、構造 タイプのパラメータ定義を作成するときは、そのメンバも ShaderParamDefContainer に保存されます。
ShaderParamDefContainer を取得する対象 |
... 使用するアクセス メンバ |
---|---|
入力パラメータ |
ShaderDef.InputParamDefs または ShaderDef::GetInputParamDefs |
出力パラメータ |
ShaderDef.OutputParamDefs または ShaderDef::GetOutputParamDefs |
構造パラメータのメンバ |
StructParamDef.SubParamDefs または StructParamDef::GetSubParamDefs |
インスタンス化したシェーダの ShaderParamDefContainer からは、ShaderParamDefContainer.Definitions または ShaderParamDefContainer::GetDefinitions メンバを介してパラメータ定義のコレクションに、あるいは ShaderParamDefContainer.GetParamDefByName または ShaderParamDefContainer::GetParamDefByName メソッドを介して特定のメンバにアクセスできます。
# Iterating over all input parameter definitions to find a struct containing a # member parameter definition called "mute" oInputParamsContainer = oShaderDef.InputParamDefs for oParamDef in oInputParamsContainer.Definitions : if (oParamDef.IsStructure) : oStructSubParamDefs = oParamDef.SubParamDefs oMuteParamDef = oStructSubParamDefs.GetParamDefByName("mute") Application.LogMessage("Found struct member paramdef called %s" % oMuteParamDef.DisplayName)
プラグイン ベースのシェーダ定義はインスタンス化されるときにのみ設定されるため、任意の ShaderParamDefContainers または ShaderParamDefContainers でパラメータ定義のリストを返せるようにするには、先にシェーダをインスタンス化しておく必要があります(たとえば、CreateShaderFromProgID コマンドを使用するスクリプトを介して)。