ParseInfo


詳細

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 になります。


パラメータ

パラメータ 言語 タイプ 説明
in_context スクリプティングおよび C# コンテキスト Context.SetAttribute メソッドを使用して、Category、DisplayName などの基本情報を取得します。
C++ CRef& Context::SetAttribute メソッドを使用して、Category、DisplayName などの基本情報を取得します。


コンテキスト属性

属性 取得/設定 詳細
Filename String または CString を取得する 解析するファイルの完全パス名。
ClassName String または CString を設定する シェーダのクラス名。 これはパーサ名およびバージョン番号とともに、ShaderDef.ProgIDParserName.ClassName.MajorVersion.MinorVersion の形式でビルドするために使用されます。
MajorVersion Long または ULONG を設定する シェーダ定義のメジャー バージョン。 これはパーサ名、クラス名、およびマイナー バージョン番号とともに、ShaderDef.ProgID を次の形式でビルドするために使用されます: "ParserName.ClassName.MajorVersion.MinorVersion".
MinorVersion Long または ULONG を設定する シェーダ定義のマイナー バージョン。 これはパーサ名、クラス名、およびメジャー バージョン番号とともに、ShaderDef.ProgID を次の形式でビルドするために使用されます: "ParserName.ClassName.MajorVersion.MinorVersion".
Category String または CString を設定する Preset Manager で使用するカテゴリ。
DisplayName String または CString を設定する Preset Manager で使用するディスプレイ名。
Errors String または CString を設定する パーサは解析エラーを出力できます。
Warnings String または CString を設定する パーサは解析に関する警告を出力できます。
{XXXX-XXXX-XXXX-XXXX} or simple string attribute name String または 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;

}


関連項目