2010-10-06 93 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) 

的算你做對的像素數,你很快就會意識到你做了很多數學的(並且需要更多的內存帶寬)。這一切都取決於你的精靈有多大,但當你有很多透支時,大量減速並不奇怪。