在GLSL中获取向量的逐分量最大值

20

我需要在GLSL中获取一个vec3的最大值。目前我正在做以下操作:

max(max(col.r, col.g),col.b)

它有效。但我想知道是否有更好的方法可以通过一个内置函数调用实现?

2个回答

24

很不幸,这就是在GLSL中你所能做到的最好的。

我已经习惯了写这样的东西。然而,如果你觉得不舒服,你可以自己编写一个函数来完成这个任务。

例如:

float max3 (vec3 v) {
  return max (max (v.x, v.y), v.z);
}

0
对于 `vec3`,你需要两个 `max` 操作,而对于 `vec4`,你只需要两个,不需要三个。
vec2 maxPairs = max(v.xy, v.zw);
float maxValue = max(maxPairs.x, maxPairs.y);

这甚至可以扩展到使用三个max找到两个vec4的最大值。
vec4 v = max(a, b);
vec2 maxPairs = max(v.xy, v.zw);
float maxValue = max(maxPairs .x, maxPairs.y);

注意:我怀疑在今天的硬件上不会有任何区别,而且如果有的话,优化器可能会为您重新排列代码。我对像这样的“代码高尔夫”是我工作中的常规部分的时代感到有点怀旧。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接