エフェクト テクニックの構文 (Direct3D 11)
エフェクト テクニックは、次の構文を使用して宣言します (エフェクト グループの構文については「エフェクト グループの構文 (Direct3D 11)」を参照してください)。
TechniqueVersion TechniqueName [ <Annotations > ] { pass PassName [ <Annotations > ] { [ SetStateGroup; ] [ SetStateGroup; ] ... [ SetStateGroup; ] } }
パラメーター
- TechniqueVersion
technique10 または technique11 です。Direct3D 11 の新規の機能 (5_0 シェーダー、BindInterfaces など) を使用するテクニックの場合は、technique11 を指定する必要があります。 - TechniqueName
(省略可能)エフェクト テクニックの名前を一意に識別する ASCII 文字列です。 - < Annotations >
[in] (省略可能)エフェクト システムで無視される、1 つ以上のユーザー指定情報 (メタデータ) です。構文については、「注釈の構文 (Direct3D 11)」を参照してください。 - pass
必須キーワードです。 - PassName
[in] (省略可能)パスの名前を一意に識別する ASCII 文字列です。 - SetStateGroup
[in] 次のようなステート グループを 1 つまたは複数設定します。StateGroup 構文 ブレンディング ステート SetBlendState( arguments );
引数リストについては、「ID3D11DeviceContext::OMSetBlendState」を参照してください。
深度/ステンシル ステート SetDepthStencilState( arguments );
引数リストについては、「ID3D11DeviceContext::OMSetDepthStencilState」を参照してください。
ラスタライザー ステート SetRasterizerState( arguments );
引数リストについては、「ID3D11DeviceContext::RSSetState」を参照してください。
シェーダー ステート SetXXXShader( Shader );
SetXXXShader は、SetVertexShader、SetDomainShader、SetHullShader、SetGeometryShader、SetPixelShader、または SetComputeShader のいずれかです (これは、API メソッド ID3D11DeviceContext::VSSetShader、ID3D11DeviceContext::DSSetShader、ID3D11DeviceContext::HSSetShader、ID3D11DeviceContext::GSSetShader、ID3D11DeviceContext::PSSetShader、および ID3D11DeviceContext::CSSetShader と類似しています)。
Shader は、シェーダー変数です。これは、次の方法をはじめとして数多くの方法で取得できます。
SetXXXShader( CompileShader( shader_profile, ShaderFunction( args ) ) ); SetXXXShader( CompileShader( NULL ) ); SetXXXShader( NULL ); SetXXXShader( myShaderVar ); SetXXXShader( myShaderArray[2] ); SetXXXShader( myShaderArray[uIndex] ); SetGeometryShader( ConstructGSWithSO( Shader, strStream0 ) ); SetGeometryShader( ConstructGSWithSO( Shader, strStream0, strStream1, strStream2, strStream3, RastStream ) );
レンダー ターゲット ステート 次のいずれかです。 SetRenderTargets( RTV0, DSV ); SetRenderTargets( RTV0, RTV1, DSV ); ... SetRenderTargets( RTV0, RTV1, RTV2, RTV3, RTV4, RTV5, RTV6, RTV7, DSV );
ステート グループの一覧については、「エフェクト ステート グループ」を参照してください。
例
この例では、ブレンディング ステートを設定します。
BlendState NoBlend { BlendEnable[0] = False; }; ... technique10 { pass p2 { ... SetBlendState( NoBlend, float4( 0.0f, 0.0f, 0.0f, 0.0f ), 0xFFFFFFFF ); } }
次の例では、オブジェクトをワイヤフレーム内にレンダリングするために、ラスタライザー ステートを設定します。
RasterizerState rsWireframe { FillMode = WireFrame; }; ... technique10 { pass p1 { .... SetRasterizerState( rsWireframe ); } }
この例では、シェーダー ステートを設定します。
technique10 RenderSceneWithTexture1Light { pass P0 { SetVertexShader( CompileShader( vs_4_0, RenderSceneVS( 1, true, true ) ) ); SetGeometryShader( NULL ); SetPixelShader( CompileShader( ps_4_0, RenderScenePS( true ) ) ); } }