在iPad上绘制2D精灵的GL_BLEND问题

时间:2010-10-06 14:03:10

标签: ipad opengl-es ios

当我们使用带有glEnable(GL_BLEND)的opengl 2.0在iPad上绘制300个精灵时(我们需要因为精灵需要透明度和alpha混合),我们得到的帧率约为40.但是当我们禁用混合时,我们得到一个帧率60岁。

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

谢谢你的时间, 理查德。

2 个答案:

答案 0 :(得分:4)

Alpha混合确实很贵。问题是你可以通过使用Z-Buffering解决很多过度绘制问题(PowerVR非常擅长)。它可以通过不写入Z缓冲区和绘制缓冲区来节省大量的内存带宽。

当您开始Alpha混合时,您需要立即从帧缓冲区混合中读取,然后回写(Read-Modify-Write或RMW)。实际上,如果你有10个重叠的精灵,那么它们需要被绘制10次,就像Z-Buffered一样(再次是...... PowerVR在前面是奇数)非混合系统你实际上只需要绘制一个像素。因此,在该边缘情况下,您通过简单地不是alpha混合来节省了十分之一的WRITE带宽。并且不要忘记还有帧缓冲区的读取需要在其上进行alpha混合。

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

答案 1 :(得分:1)

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

fragment * alpha + previous * (1 - alpha)

计算您执行此操作的像素数,您很快就会意识到您需要进行大量数学运算(并且需要更多内存带宽)。这一切都取决于你的精灵有多大,但是当你有大量的透支时,减速很快就不足为奇了。