我现在开始学习着色器(HLSL,GLSL),看了很多教程,发现很少创建变量,这使得阅读变得更加困难。我想知道创建新变量是否会影响着色器的性能。
例如,在CG中:
这个
inline float alphaForPos(float4 pos, float4 nearVertex){
return (1.0/_FogMaxRadius)*clamp(_FogRadius - max(length(pos.z - nearVertex.z),length(pos.x - nearVertex.x)), 0.0, _FogRadius)/_FogRadius;
}
比这更快?
inline float alphaForPos(float4 pos, float4 nearVertex){
float distX = length(pos.x - nearVertex.x);
float distZ = length(pos.z - nearVertex.z);
float alpha = 0.0;
alpha = _FogRadius - max(distZ,distX);
alpha = clamp(alpha, 0.0, _FogRadius);
return (1.0/_FogMaxRadius)*alpha/_FogRadius;
}
alphaForPos(in vec4 pos,in vec4 nearVertex)
),以告诉编译器如果您在函数体内更改了变量的值,则要制作局部副本。另一方面,“inout”意味着允许在函数内部进行的任何更改传播到外部,并且不需要复制。 - Andon M. Coleman