效果技术语法 (Direct3D 11)

使用本节中所述的语法声明效果技术。

技术版本 技术名称 [ <注释> ]

{

pass *PassName* \[ <*Annotations* > \] {
\[ *SetStateGroup*; \] \[ *SetStateGroup*; \] ... \[ *SetStateGroup*; \]
}

}

参数

说明
技术版本
技术 10 或技术 11。 使用 Direct3D 11 (5_0 着色器、BindInterfaces 等) 新功能的技术必须使用技术11。
技术名称
可选。 唯一标识效果技术名称的 ASCII 字符串。
< 注释 >
[in] 可选。 效果系统忽略的一个或多个用户提供的信息 (元数据) 。 有关语法,请参阅 Direct3D 11) (注释语法
通过
必需的关键字 (keyword) 。
PassName
[in] 可选。 唯一标识传递名称的 ASCII 字符串。
SetStateGroup
[in]设置一个或多个状态组,例如:
StateGroup 语法
混合状态
SetBlendState( arguments ); 

有关参数列表,请参阅 [ID3D11DeviceContext::OMSetBlendState] (/windows/desktop/api/D3D11/nf-d3d11-id3d11devicecontext-omsetblendstate) 。

深度模具状态
SetDepthStencilState( arguments ); 

有关参数列表 ,请参阅 ID3D11DeviceContext::OMSetDepthStencilState

光栅器状态
SetRasterizerState( arguments ); 

有关参数列表,请参阅 [ID3D11DeviceContext::RSSetState] (/windows/desktop/api/D3D11/nf-d3d11-id3d11devicecontext-rssetstate) 。

着色器状态
SetXXXShader( Shader );

SetXXXShader 是 SetVertexShader、SetDomainShader、SetHullShader、SetGeometryShader、SetPixelShader 或 SetComputeShader (,它们类似于 API 方法 ID3D11DeviceContext::VSSetShaderID3D11DeviceContext::D SSetShaderID3D11DeviceContext::HSSetShaderID3D11DeviceContext::GSSetShaderID3D11DeviceContext::P SSetShaderID3D11DeviceContext::CSSetShader) 。

着色器是一个着色器变量,可通过多种方式获取它:

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 );

类似于 ID3D11DeviceContext::OMSetRenderTargets

示例

此示例设置混合状态。

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 ) ) );
    }
}

效果格式

效果组语法 (Direct3D 11)

效果状态组