Ich habe einen Pixel-Shader, der einfach die Eingabefarbe durchlaufen sollte, aber stattdessen bekomme ich ein konstantes Ergebnis. Ich denke, dass meine Syntax das Problem sein könnte. Hier ist der Shader:Übergeben von Farben durch einen Pixel-Shader in HLSL
struct PixelShaderInput
{
float3 color : COLOR;
};
struct PixelShaderOutput
{
float4 color : SV_TARGET0;
};
PixelShaderOutput main(PixelShaderInput input)
{
PixelShaderOutput output;
output.color.rgba = float4(input.color, 1.0f); // input.color is 0.5, 0.5, 0.5; output is black
// output.color.rgba = float4(0.5f, 0.5f, 0.5f, 1); // output is gray
return output;
}
Zum Testen, ich habe die Vertex-Shader, dass dies in der pipleline Hindurchleiten eines Farbparameters von 0,5, 0,5, 0,5 vorausgeht. Beim Durchlaufen des Pixel-Shaders in VisualStudio hat input.color die korrekten Werte und diese werden output.color korrekt zugewiesen. Beim Rendern sind die Scheitelpunkte, die diesen Shader verwenden, jedoch alle schwarz. Hier
ist die Vertex-Shader-Element-Beschreibung:
const D3D11_INPUT_ELEMENT_DESC vertexDesc[] =
{
{ "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 },
{ "COLOR", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 },
{ "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 },
};
Ich bin nicht sicher, wenn es wichtig ist, dass die Vertex-Shader nehmen Farben als RGB das gleiche gibt, aber die Pixel-Shader-Ausgänge RGBA. Die Alpha-Ebene funktioniert mindestens richtig.
Wenn ich diese erste Zuweisung auskommentiere, die input.color verwendet und die andere Zuweisung auskommentiert, mit den expliziten Werten, dann sind die gerenderten Pixel grau (wie erwartet).
Irgendwelche Ideen, was ich hier falsch mache?
Ich verwende Shader Model 4 Level 9_1, mit deaktivierten Optimierungen und Debug-Informationen aktiviert.
Danke Yeti. Die float4-Initialisierung, die ich dort habe, nahm ich direkt aus dem Direct3D-Beispiel, das mit VS2012 ausgeliefert wird. Ich habe versucht, zu dem zu wechseln, den du erwähnt hast, aber ich bekomme das gleiche Ergebnis. –
Ich habe meinen Code so geändert, dass die Vertex-Deklaration jetzt die Farbe DXGI_FORMAT_R32G32B32A32_FLOAT hat, und ich habe die Shader so geändert, dass sie float4 statt float3 übernehmen und zurückgeben, aber keine Änderung in der Ausgabe. –
float4 (float3, 1.0f); ist korrekt HSLS-Syntax, aber ich kann das msdn doc nicht finden. – Stardidi