我有一個像素着色器,它應該簡單地傳遞輸入顏色,但是我得到的是恆定的結果。我認爲我的語法可能是問題。這裏是着色器:通過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;
}
爲了測試,我有頂點着色器,在經過0.5,0.5,0.5顏色參數的pipleline前面這一點。在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,禁用了優化並啓用了調試信息。
謝謝雪人。我在那裏的float4初始化我直接從VS2012附帶的Direct3D樣本中獲取。我試着改變你提到的那個,但得到相同的結果。 –
我修改了我的代碼,使頂點聲明現在具有DXGI_FORMAT_R32G32B32A32_FLOAT的顏色,並且修改了着色器,並返回float4而不是float3,但輸出中沒有更改。 –
float4(float3,1.0f);是正確的HSLS語法,但我找不到它的msdn文檔。 – Stardidi