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

时间:2011-08-31 01:51:39

标签: glsl opengl-es-2.0 swizzling powervr-sgx

PowerVR说

  

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

究竟是什么调酒?

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

但是当 color 是vec4时,vec3(color.b, color.r, color.g)vec3(color)怎么办?

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

2 个答案:

答案 0 :(得分:3)

根据GLSL规范,“swizzle mask”被定义为矢量类型的组件字段选择器。 .brg是一个混合模板,.rgba.b也是如此。所有这些都在调整。

至于PowerVR所谈论的内容,这取决于他们。也许.rgb很好,因为它以相同的顺序选择组件。或许它不是。

答案 1 :(得分:2)

  

调低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编译器可以检测到并且也可以优化移动)。