Поделиться через


Синтаксис метода эффектов (Direct3D 11)

Метод эффекта объявляется с помощью синтаксиса, описанного в этом разделе.

TechniqueVersion TechniqueName [ <Заметки> ]

{

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

}

Параметры

Элемент Описание
TechniqueVersion
Либо метод10, либо метод11. Методы, использующие функции, новые для Direct3D 11 (шейдеры 5_0, BindInterfaces и т. д.), должны использовать метод 11.
Имя метода
Необязательный элемент. Строка ASCII, однозначно идентифицирующая имя метода эффекта.
< Аннотации >
[в] Необязательно. Один или несколько фрагментов предоставленных пользователем сведений (метаданных), которые игнорируются системой эффектов. Синтаксис см. в разделе Синтаксис заметки (Direct3D 11).
Пройти
Обязательный ключевое слово.
PassName
[в] Необязательно. Строка 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::VSSetShader, ID3D11DeviceContext::D SSetShader, ID3D11DeviceContext::HSSetShader, ID3D11DeviceContext::GSSetShader, ID3D11DeviceContext::P SSetShader и ID3D11DeviceContext::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)

Группы состояний эффектов