PowerVR说
混合低向量的分量是昂贵的,应该是避免。
swizzling到底是什么?
color.brg // This fits the definition I'm familiar with.
但是当color是vec4时,vec3(color.b, color.r, color.g)
或vec3(color)
会怎样呢?
访问或修改单个组件是否构成swizle ?我真的不这么认为,但如果不是,那么你可以通过手动做一些赋值操作来解决swizling问题。我这样做没有问题,但对我来说似乎很神奇,如果你可以通过编写没有swizzle符号的代码以更快的速度获得相同的效果。
根据GLSL规范,"swizzle mask "被定义为矢量类型的组件字段选择器。.brg
是一个搅拌掩模,.rgba
或.b
也是。所有这些都在搅拌。
至于PowerVR在说什么,那取决于他们。也许.rgb
是好的,因为它以相同的顺序选择组件。也可能不是。
混合低向量的分量是昂贵的,应该是避免。
lowp向量是每通道8位浮动,我不确定Powervr,但一般来说,在浮动32位寄存器(或16位,再次取决于体系结构)之间传输移动数据比浮动8位更有效,因为它不需要额外的掩码/移动指令。大多数GPU内存都是这样分配的。
swizzling到底是什么?
简单来说,
swizzle告诉源的哪个通道(或源的组合)应该进入目标的哪个通道
的例子:
vec3 dest.rgb = vec3(src1.r, src2.r, src3.r);
将移动src1。R通道到dest.r通道,src2。R通道转换为test .g通道和sr3。R通道到dest.b通道
使用swizle比手动移动通道更有效,因为gpu在硬件上支持。(同样,一些GPU编译器可以检测到这一点,并可以优化移动)。