在我的着色器中,我声明了一个非序列化的float4s数组,并在元素上执行一段代码:
uniform float4 _HandPos[5];
v2f vert(appdata v)
{
float distH;
for (float i = 0; i < _HandPos.Length; i++)
{
/*if element has not been assigned, assuming an empty element is NaN,
check distance between vertex and element*/
if (!isnan(_HandPos[i]))
{
distH = distance(_HandPos[i], v.vertex);
}
//do something with distH here
}
}
每一帧,C#脚本中的数组都会发送到_HandPos。它并不总是为所有5个元素发送值,所以我必须将空的元素过滤掉。在这里,我假设一个空元素是NaN,但这似乎不起作用。
答案 0 :(得分:0)
如果您不在每帧中写入值,则会保留最后设置的值。或者,您可以使用与需要重新处理_HandPos元素相对应的int值数组。
请记住,GPU上的分支语句(例如if())通常会导致GPU执行两个分支然后丢弃一个值 - 所以如果这是一个优化,它可能不会去达到预期的效果。