像素着色器始终返回白色

时间:2016-04-12 15:18:40

标签: c++ directx hlsl

我有一个像素着色器,试图返回静态颜色

float4 PPBright(PS_POSTPROCESS_INPUT ppIn) : SV_Target
{
    return (1.00f, 0.00f, 0.00f, 1.0f);
}

无论颜色值返回白色,我都可以更改alpha值,它会影响颜色(白色,灰色,黑色)。

这是我的cpp代码:

g_pd3dDevice->OMSetRenderTargets(1, &BackBufferRenderTarget, DepthStencilView);
BloomTextureVar->SetResource(SceneShaderResource);
g_pd3dDevice->IASetInputLayout(nullptr);
g_pd3dDevice->IASetPrimitiveTopology(D3D10_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP);
tech->GetPassByIndex(index)->Apply(0);
g_pd3dDevice->Draw(4, 0);

2 个答案:

答案 0 :(得分:5)

像素着色器不会返回您期望的float4。在这种情况下,它返回float4(1.0f, 1.0f, 1.0f, 1.0f)。为什么?由于逗号运算符。表达式的左侧被忽略,1.0f被隐式转换为float4。您希望调用float4的构造函数,如float4(1.0f, 0.0f, 0.0f, 1.0f)

答案 1 :(得分:1)

我不知道是否应该保留或删除我的问题,错误就是退货声明:

return (1.00f, 0.00f, 0.00f, 1.0f);

应该是

return float4(1.00f, 0.00f, 0.00f, 1.0f);