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


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

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

technique10 TechniqueName [ <Аннотации> ]

{

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

}

Параметры

technique10

Обязательный ключевое слово.

Имя метода

Необязательный элемент. Строка ASCII, однозначно идентифицирующая имя метода эффекта.

Аннотации

[в] Необязательно. Один или несколько фрагментов предоставленных пользователем сведений (метаданных), которые игнорируются системой эффектов. Синтаксис см. в разделе Синтаксис заметки (Direct3D 10).

Пройти

Обязательный ключевое слово.

PassName

[в] Необязательно. Строка ASCII, однозначно идентифицирующая имя прохода.

SetStateGroup

[in] Задайте одну или несколько групп состояний, например:

StateGroup Синтаксис
Состояние смешения
SetBlendState( arguments ); 

Список аргументов см. в разделе [OMSetBlendState](/windows/desktop/api/D3D10/nf-d3d10-id3d10device-omsetblendstate).

Состояние трафарета глубины
SetDepthStencilState( arguments ); 

Список аргументов см. в разделе OMSetDepthStencilState .

Состояние средства прорисовки
SetRasterizerState( arguments ); 

Список аргументов см. в разделе [RSSetState](/windows/desktop/api/D3D10/nf-d3d10-id3d10device-rssetstate).

Состояние шейдера
SetXXXShader( CompileShader( shader_profile, ShaderFunction( args ) ) );

или

SetXXXShader( CompileShader( NULL ) );

или

SetXXXShader( NULL );

SetXXXXShader — это один из методов SetVertexShader, SetGeometryShader или SetPixelShader (которые аналогичны методам API VSSetShader, GSSetShader и PSSetShader).

 

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

Примеры

Этот пример (из примера CubeMapGS) задает состояние наложения.

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

В этом примере задается состояние шейдера (из примера BasicHLSL10); который использует вершинный шейдер и шейдер пикселей.

technique10 RenderSceneWithTexture1Light
{
    pass P0
    {
        SetVertexShader( CompileShader( vs_4_0, RenderSceneVS( 1, true, true ) ) );
        SetGeometryShader( NULL );
        SetPixelShader( CompileShader( ps_4_0, RenderScenePS( true ) ) );
    }
}

Формат эффекта