好吧,我可以告诉你如何进行,但你可能不喜欢这个答案。;) 主要的两种方法是对纹理进行采样或进行着色器计算。要确定哪一个对您的情况更有效,您需要同时实现这两个,并开始进行基准测试。影响每个性能的因素太多,无法给出一个通用的答案。
主要因素之一当然是您的计算有多复杂。但是现代 GPU 对于纯计算具有非常高的原始性能。自从您询问 ES 以来,您最有可能使用的移动 GPU 并没有那么多,但即使是最新的移动 GPU 也变得非常强大。分支不是免费的,但不一定像您预期的那样有害。
另一方面,纹理采样看起来像是着色器中的单个操作,但仅基于此,您不应该假设它自动比执行一堆计算更快。纹理采样性能可能受到许多因素的限制,包括纹理采样硬件单元的吞吐量、内存带宽、缓存命中率等。特别是如果您的纹理需要相当大以提供必要的精度,内存带宽可能会伤害您,访问移动设备上的内存会消耗大量电量。此外,仅需要额外的内存使用是不可取的,因为您主要处理非常有限的内存量。
当然,不同 GPU 之间的性能特征可能会有很大差异。因此,如果您想得出可靠的结论,则需要在各种设备上进行基准测试。
对于在着色器中实现计算的方法,请确保它尽可能最佳。在合理可能的情况下避免使用分支,或者至少对各种选项进行基准测试以查看分支对性能的影响程度。如果每个片段的计算部分都相同,请预先计算这些值并将它们传递到着色器中。尽可能用更便宜的操作代替昂贵的操作。例如,不要除以统一值,而是将逆作为统一值传递,并使用乘法代替。尽可能使用向量运算。