버퍼 없이 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 );
관련 항목