Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Creating and binding buffers is not necessary if your shaders don't require buffers. This section contains an example of simple vertex and pixel shaders that draw a single triangle.
Vertex Shader
For example, you could declare a vertex shader that creates its own vertices.
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;
}
Pixel Shader
// 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;
}
Technique
A technique is a collection of rendering passes (there must be at least one pass).
VertexShader vsCompiled = CompileShader( vs_4_0, VSmain() );
technique10 t0
{
pass p0
{
SetVertexShader( vsCompiled );
SetGeometryShader( NULL );
SetPixelShader( CompileShader( ps_4_0, PSmain() ));
}
}
Application Code
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 );
Related topics