究竟是什么构成了OpenGL ES 2.0中的混匀?(特别是PowerVR SGX)



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编译器可以检测到这一点,并可以优化移动)。

相关内容

  • 没有找到相关文章

最新更新