我有一个像素着色器,应该只是将输入颜色传递,但实际上我得到的是一个常数结果。我认为我的语法可能有问题。以下是着色器代码:
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;
}
为了测试,我在管线中使用的顶点着色器传递了一个COLOR参数,值为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,并取消注释另一个赋值,使用显式值,那么渲染的像素是灰色的(如预期)。
你对我在这里做错了什么有什么想法吗?
我正在使用shader模型4级9_1,禁用优化并启用调试信息。