Использование этапа Input-Assembler без буферов
Создание и привязка буферов не требуется, если шейдеры не требуют буферов. В этом разделе приведен пример простых вершинных и пиксельных шейдеров, которые рисуют один треугольник.
Вершинный построитель текстуры
Например, можно объявить вершинный шейдер, который создает собственные вершины.
struct VSIn
{
uint vertexId : SV_VertexID;
};
struct VSOut
{
float4 pos : SV_Position;
float4 color : color;
};
VSOut VSmain(VSIn input)
{
VSOut output;
if (input.vertexId == 0)
output.pos = float4(0.0, 0.5, 0.5, 1.0);
else if (input.vertexId == 2)
output.pos = float4(0.5, -0.5, 0.5, 1.0);
else if (input.vertexId == 1)
output.pos = float4(-0.5, -0.5, 0.5, 1.0);
output.color = clamp(output.pos, 0, 1);
return output;
}
Построитель текстуры
// NoBuffer.fx
// Copyright (c) 2004 Microsoft Corporation. All rights reserved.
//
struct PSIn
{
float4 pos : SV_Position;
linear float4 color : color;
};
struct PSOut
{
float4 color : SV_Target;
};
PSOut PSmain(PSIn input)
{
PSOut output;
output.color = input.color;
return output;
}
Метод
Метод — это коллекция проходов отрисовки (должно быть по крайней мере один проход).
VertexShader vsCompiled = CompileShader( vs_4_0, VSmain() );
technique10 t0
{
pass p0
{
SetVertexShader( vsCompiled );
SetGeometryShader( NULL );
SetPixelShader( CompileShader( ps_4_0, PSmain() ));
}
}
Код приложения
m_pD3D11Device->IASetInputLayout( NULL );
m_pD3D11Device->IASetPrimitiveTopology( D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST );
ID3DX11EffectTechnique * pTech = NULL;
pTech = m_pEffect->GetTechniqueByIndex(0);
pTech->GetPassByIndex(iPass)->Apply(0);
m_pD3D11Device->Draw( 3, 0 );
Связанные темы