QueryParserSettings (FileName 属性を介して使用可能)で返されたファイル リストにある各シェーダの登録情報をコンパイルします。
このコールバックは、ファイルが解析されるたびに発生します。 解析するファイル リストを Softimage が QueryParserSettings コールバックから取得すると、ファイルの解析が開始され、ファイルごとに、ファイル内で見つかったシェーダ定義がこのコールバックによって登録されます。
ヒント: | Preset Manager に表示されるシェーダ定義を取得するには、Preset Manager にシェーダ定義を表示したい場所のカテゴリ ラベルを Category 属性に設定する必要があります。 また、DisplayName 属性を使用して、よりユーザにわかりやすいシェーダ名を設定することもできます。 |
public class <plugin-item_name> { public bool ParseInfo( Context in_context ) { ... } } |
CStatus <plugin-item_name>_ParseInfo( CRef& in_context ) { ... } |
function <plugin-item_name>_ParseInfo( in_context ) { ... } |
def <plugin-item_name>_ParseInfo( in_context ): ... |
Function <plugin-item_name>_ParseInfo( in_context ) ... End Function |
sub <plugin-item_name>_ParseInfo { my $in_context = shift; } |
<plugin-item_name> は、PluginRegistrar.RegisterShaderLanguageParser の呼び出しで指定されているパーサ名です。この名前に含まれるスペースはアンダースコアに置き換えられます。 たとえば、My Parser という名前のパーサをプラグインに登録する場合、コールバック関数の名前の先頭は My_Parser になります。
パラメータ | Language | タイプ | 詳細 |
---|---|---|---|
in_context | スクリプティングおよび C# | コンテキスト | Context.SetAttribute メソッドを使用して、Category、DisplayName などの基本情報を取得します。 |
C++ | CRef& | Context::SetAttribute メソッドを使用して、Category、DisplayName などの基本情報を取得します。 |
Attribute | 取得/設定 | 詳細 |
---|---|---|
Filename | 文字列 または CString を取得する | 解析するファイルの完全パス名。 |
ClassName | 文字列 または CString を設定する | シェーダのクラス名。 これは、パーサ名、バージョン番号とともに ShaderDef.ProgID を次の形式でビルドするために使用されます:"ParserName.ClassName.MajorVersion.MinorVersion". |
MajorVersion | Long または ULONG を設定する | シェーダ定義のメジャー バージョン。 これはパーサ名、クラス名、およびマイナー バージョン番号とともに、ShaderDef.ProgID を次の形式でビルドするために使用されます: "ParserName.ClassName.MajorVersion.MinorVersion". |
MinorVersion | Long または ULONG を設定する | シェーダ定義のマイナー バージョン。 これはパーサ名、クラス名、およびメジャー バージョン番号とともに、ShaderDef.ProgID を次の形式でビルドするために使用されます: "ParserName.ClassName.MajorVersion.MinorVersion". |
Category | 文字列 または CString を設定する | Preset Manager で使用するカテゴリ。 |
DisplayName | 文字列 または CString を設定する | Preset Manager で使用するディスプレイ名。 |
Errors | 文字列 または CString を設定する | パーサは解析エラーを出力できます。 |
Warnings | 文字列 または CString を設定する | パーサは解析に関する警告を出力できます。 |
{XXXX-XXXX-XXXX-XXXX} or simple string attribute name | 文字列 または CString を設定する | 任意の属性の GUID または名前を表す文字列を設定することによって、ShaderDef でカスタム シェーダ属性を設定できます。 |
SICALLBACK UtShaderLanguageParser_ParseInfo( CRef& in_ctxt ) { XSI::Context ctxt(in_ctxt); XSI::CString strFilename = ctxt.GetAttribute( L"FileName" ); std::ifstream in( strFilename.GetAsciiString() ); if(!in) { ctxt.PutAttribute( L"Errors", L"Cannot open file: " + strFilename + L"\n" ); return CStatus::Fail; } // Read the first line to get the progid. char buf[255]; in.getline( buf, 255 ); if( strlen( buf ) > 0 ) { CSIString str(buf); std::vector<CSIString> tokens; str.Split( L" ", tokens ); if( tokens.size() == 3 ) { // Set the ProgID information XSI::CString strClassName( (LPCWSTR)tokens[0] ); ULONG ulMajorVersion = wcstoul( (LPCWSTR)tokens[1], NULL, 10 ); ULONG ulMinorVersion = wcstoul( (LPCWSTR)tokens[2], NULL, 10 ); ctxt.PutAttribute( L"ClassName", strClassName ); ctxt.PutAttribute( L"MajorVersion", ulMajorVersion ); ctxt.PutAttribute( L"MinorVersion", ulMinorVersion ); // Set the Category and Display Name ctxt.PutAttribute( L"Category", L"SLTest" ); ctxt.PutAttribute( L"DisplayName", strClassName ); // Same as class name // Setting a user attribute ctxt.PutAttribute( L"{F2EF07FE-1B57-4245-BF08-F5556212BFDF}", L"User data" ); } else { ctxt.PutAttribute( L"Errors", L"Invalid ProgID at Line 1: " + strFilename + L"\n" ); in.close(); return CStatus::Fail; } } else { ctxt.PutAttribute( L"Errors", L"Invalid ProgID at Line 1: " + strFilename + L"\n" ); in.close(); return CStatus::Fail; } in.close(); return CStatus::OK; } |