パラメータ定義は、ShaderParamDefContainer または ShaderParamDefContainer として表される特別なコンテナに保存されます。ShaderDef または ShaderDef には、入力パラメータ定義用の ShaderParamDefContainer が 1 つと、出力用にもう 1 つあります。また、構造 タイプのパラメータ定義を作成するときは、そのメンバも ShaderParamDefContainer に保存されます。
| ShaderParamDefContainer を取得する対象 |
... 使用するアクセス メンバ |
|---|---|
| 入力パラメータ |
|
| 出力パラメータ |
|
| 構造パラメータのメンバ |
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 コマンドを使用するスクリプトを介して)。