2

PowerVR 说

Swizzling lowp 向量的组件是昂贵的,应该避免。

究竟什么是调酒?

color.brg  // This fits the definition I'm familiar with.

但是vec3(color.b, color.r, color.g),或者vec3(color),当颜色是 vec4 时呢?

访问或修改单个组件是否构成混搭?我真的不这么认为,但如果不是,那么您可以通过手动执行更多的分配操作来解决 swizzling。我这样做没有问题,但对我来说这似乎很神奇,如果你可以通过编写没有 swizzle 符号的代码以更快的速度获得相同的效果。

4

2 回答 2

3

根据 GLSL 规范,“swizzle mask”被定义为向量类型的组件字段选择器。.brg是 swizzle 掩码,与.rgba或一样.b。所有这些都令人兴奋。

至于PowerVR在说什么,这取决于他们。也许.rgb很好,因为它以相同的顺序选择组件。或者也许不是。

于 2011-08-31T02:46:16.280 回答
2

Swizzling lowp 向量的组件是昂贵的,应该避免。

每个通道的 lowp 向量是 8 位浮动的,我不确定 Powervr 但一般来说,在浮动 32 位寄存器(或 16 位,再次取决于架构)之间传输移动数据比浮动 8 位更有效,因为它不需要额外的掩码/移动指令。大多数 GPU 内存都是这样排列的。

究竟什么是调酒?

简单来说,

swizzle 告诉哪个渠道的来源(或来源的组合)应该进入目的地的哪个渠道

例子:

vec3 dest.rgb = vec3(src1.r, src2.r, src3.r);

会将 src1.r 频道移动到 dest.r 频道,将 src2.r 频道移动到 dest.g 频道,将 src3.r 频道移动到 dest.b 频道。

使用 swizzle 比手动移动通道更有效,因为 GPU 在硬件中支持这一点。(同样,一些 GPU 编译器可以检测到这一点并且也可以优化移动)。

于 2014-04-04T12:21:42.313 回答