Ho uno shader di pixel che dovrebbe semplicemente passare il colore di input, ma invece ottengo un risultato costante. Penso che la mia sintassi potrebbe essere il problema. Ecco dell'ombreggiatore:Passaggio di colori attraverso un 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;
}
Per il test, ho vertex che precede questo nel pipleline passando un parametro di colore di 0.5, 0.5, 0.5. Passando attraverso il pixel shader in VisualStudio, input.color ha i valori corretti, e questi vengono assegnati correttamente a output.color. Tuttavia, durante il rendering, i vertici che utilizzano questo shader sono tutti neri.
Ecco il vertice descrizione elemento Shader:
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 },
};
non sono sicuro se è importante che il vertex shader prende i colori come RGB emette lo stesso, ma le uscite pixel shader RGBA. Lo strato alfa funziona correttamente almeno.
Se commento questo primo compito, quello che usa input.color, e decommenta l'altro compito, con i valori espliciti, i pixel resi sono grigi (come previsto).
Qualche idea su cosa sto facendo male qui?
Utilizzo lo shader model 4 level 9_1, con le ottimizzazioni disattivate e le informazioni di debug abilitate.
Grazie Yeti. L'inizializzazione float4 che ho lì ho preso direttamente dal campione Direct3D fornito con VS2012. Ho provato a cambiare a quello che dici ma sto ottenendo lo stesso risultato. –
Ho modificato il mio codice in modo tale che la dichiarazione del vertice ora abbia colore come DXGI_FORMAT_R32G32B32A32_FLOAT e ho modificato gli shader per prendere e restituire float4 anziché float3, ma nessuna modifica nell'output. –
float4 (float3, 1.0f); è corretta sintassi HSLS, ma non riesco a trovare il msdn doc su di esso. – Stardidi