在iPad上绘制二维精灵的GL_混合问题

在iPad上绘制二维精灵的GL_混合问题,ipad,opengl-es,ios,Ipad,Opengl Es,Ios,当我们在iPad上使用opengl 2.0和glEnable(Glu BLEND)绘制300个精灵时(我们需要它,因为精灵需要tranparency和alpha混合),我们得到了大约40的帧率。但当我们禁用混合时,帧速率为60 现在(alpha)混合真的那么昂贵,还是我们做错了什么 谢谢你抽出时间, 理查德。真是太贵了。它需要对每个像素进行读修改写操作。修改操作的格式为 fragment * alpha + previous * (1 - alpha) 数一数这样做的像素数,你很快就会意识到你

当我们在iPad上使用opengl 2.0和glEnable(Glu BLEND)绘制300个精灵时(我们需要它,因为精灵需要tranparency和alpha混合),我们得到了大约40的帧率。但当我们禁用混合时,帧速率为60

现在(alpha)混合真的那么昂贵,还是我们做错了什么

谢谢你抽出时间,
理查德。

真是太贵了。它需要对每个像素进行读修改写操作。修改操作的格式为

fragment * alpha + previous * (1 - alpha)

数一数这样做的像素数,你很快就会意识到你做了很多数学运算(并且需要更多的内存带宽)。这一切都取决于你的精灵有多大,但当你透支很多的时候,你会严重减速也就不足为奇了。

阿尔法混合真的很昂贵。问题是,通过使用Z缓冲,您可以解决很多透支问题(PowerVR非常擅长这一点)。通过不写入Z缓冲区和draw缓冲区,它可以节省大量内存带宽

一旦开始alpha混合,就需要立即从帧缓冲区混合中读取,然后再写回(read-Modify-write或RMW)。实际上,如果你有10个重叠的精灵,那么它们需要被绘制10次,而使用Z缓冲(同样是ish.。PowerVR在前面很奇怪)的非混合系统,你实际上只需要绘制一个像素。因此,在这种边缘情况下,通过简单地不进行alpha混合,您节省了十分之一的写入带宽。别忘了还有从帧缓冲区读取的数据,需要在上面进行alpha混合

正如我提到的,当涉及Z缓冲时,它确实变得更加复杂。主要是因为Z缓冲区需要读取、比较和可能的写入,但使用Z缓冲区,您可以在管道中更早地丢弃像素,这意味着您可以节省更多的处理时间。我相信,再加上PowerVR仍然使用的平铺系统,您主要关心的是alpha混合的RMW带宽损失