我有一个像素着色器,它应该简单地传递输入颜色,但我得到的是一个恒定的结果。我认为我的语法可能是问题所在。这是着色器:
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 的颜色参数。通过 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。alpha 层至少可以正常工作。
如果我注释掉第一个分配,即使用 input.color 的分配,并取消注释另一个分配,使用显式值,则渲染的像素是灰色的(如预期的那样)。
关于我在这里做错了什么的任何想法?
我正在使用着色器模型 4 级别 9_1,禁用了优化并启用了调试信息。