2010-10-06 55 views
3

2D精灵当我们用画的OpenGL 2.0在iPad上300个精灵用glEnable(GL_BLEND)GL_BLEND问题(这就需要我们,因为精灵需要tranparency和alpha混合),我们得到的周围40但是,当帧率我们禁止混合我们得到的60与借鉴的iPad

现在是(阿尔法)混合真的有那么昂贵的,还是我们做错事的帧率?

感谢您的时间, 理查德。

回答

4

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

开始alpha混合,那么你需要立即从帧缓冲混合读取和写回的那一刻(读 - 修改 - 写或RMW)。有效地,如果你有10个重叠的精灵,那么他们需要绘制10次,如同Z-Buffered(同样是PowerVR在前面奇怪)非混合系统,你只需要绘制一个像素。所以在这种边缘情况下,通过简单的alpha混合就可以节省十分之一的WRITE带宽。并且不要忘记还有帧缓冲区中需要进行alpha混合的读取。

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

1

这真的很贵。它需要对每个像素进行读取 - 修改 - 写入。修改操作的形式

fragment * alpha + previous * (1 - alpha) 

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