为什么常量的值会影响HLSL着色器编译?

时间:2012-06-16 06:38:05

标签: xna directx xna-4.0 hlsl

我在XNA4中有一个效果文件,编译为Shader Model 3。

此行编译精细(在2种颜色之间插值):

return lerp(float4(1,0,0,1),float4(0,0,1,1),pf.x);

将第一种颜色的绿色成分从0更改为0.5:

return lerp(float4(1,0.5,0,1),float4(0,0,1,1),pf.x);

编译失败的结果:

error X6045: When constant registers are read multiple times in a single 
instruction, the _abs modifier must either be present on all of the 
constants, or none of them. 

Google搜索错误代码(编辑:此问题除外)

1 个答案:

答案 0 :(得分:1)

根据documentation,传递给lerp()的所有值应该具有相同的类型和大小,因此可能会有效:

return lerp(float4(1,0.5,0,1),float4(0,0,1,1),float4(pf.x,pf.x,pf.x,pf.x));