Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Das Erstellen und Binden von Puffern ist nicht erforderlich, wenn Ihre Shader keine Puffer erfordern. Dieser Abschnitt enthält ein Beispiel für einfache Vertex- und Pixelshader, die ein einzelnes Dreieck zeichnen.
Vertexshader
Sie können beispielsweise einen Vertex-Shader deklarieren, der seine eigenen Scheitelpunkte erstellt.
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;
}
Pixelshader
// 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;
}
Verfahren
Eine Technik ist eine Sammlung von Renderingdurchläufen (es muss mindestens ein Durchlauf vorhanden sein).
VertexShader vsCompiled = CompileShader( vs_4_0, VSmain() );
technique10 t0
{
pass p0
{
SetVertexShader( vsCompiled );
SetGeometryShader( NULL );
SetPixelShader( CompileShader( ps_4_0, PSmain() ));
}
}
Anwendungscode
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 );
Zugehörige Themen