入力色を単純に渡すピクセル シェーダーがありますが、代わりに一定の結果が得られます。私の構文が問題かもしれないと思います。シェーダーは次のとおりです。
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;
}
テストのために、0.5、0.5、0.5 の COLOR パラメーターを渡すパイプラインでこれに先行する頂点シェーダーがあります。VisualStudio でピクセル シェーダーをステップ実行すると、input.color の値が正しく、output.color に正しく割り当てられています。ただし、レンダリングすると、このシェーダを使用する頂点はすべて黒になります。
頂点シェーダー要素の説明は次のとおりです。
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 },
};
頂点シェーダーが RGB 出力と同じように色を受け取ることが重要かどうかはわかりませんが、ピクセル シェーダーは RGBA を出力します。少なくともアルファ レイヤーは正しく機能しています。
最初の割り当てであるinput.colorを使用する割り当てをコメントアウトし、他の割り当てを明示的な値でコメント解除すると、レンダリングされたピクセルは灰色になります(予想どおり)。
ここで私が間違っていることについてのアイデアはありますか?
最適化を無効にし、デバッグ情報を有効にして、シェーダー モデル 4 レベル 9_1 を使用しています。