簡體   English   中英

性能:Quartz2D與OpenGL ES(GLKit)

[英]Performance: Quartz2D vs OpenGL ES (GLKit)

我正在開發一個項目,您可以使用觸摸在屏幕上繪圖。 我想過使用OpenGL,但是我遇到了兩個例子; 一個使用OpenGL,另一個使用Quartz2D。

來自Apple,GLPaint的示例項目,使用OpenGL

使用Quartz2D從EffectiveUI的示例項目

讓我感到震驚的是,Quartz實現比OpenGL實現要快得多。 我一直認為OpenGL會更快,因為它的級別較低,幾乎可以與硬件本身對話。 我知道Quartz2D也在使用OpenGL繪圖,所以我的問題是; 為什么GLPaint示例中的繪圖如此之慢?

你能對GLPaint項目進行任何有利於性能的優化嗎?

眾所周知,在模擬器上,Quartz 2D可以比OpenGLES快約5倍,因為OpenGLES並不是硬件加速(不同的芯片組,ARM與i386)。

我強烈建議您在設備上使用OpenGLES進行測試並將其與Quartz 2D進行比較,然后您應該體驗OpenGLES的2倍性能增強。

使用OpenGL時要考慮的另一件事是圖像處理。 OpenGL不是為此而制作的,因此只有一個圖像緩沖區,這意味着一次只能有一個圖像存在於GPU中。 為了補償,嘗試使用像TexturePacker這樣的程序來制作紋理圖集(作為PVRTC)以加載到OpenGL中,並且您應該有一些巨大的性能提升。

考慮到上述情況,請記住GLPaint實際上並沒有在它的實現中繪制線條,而是嘗試在幀緩沖區上繪制半透明的PNG,然后相應地對其進行着色。 這是非常昂貴的,我建議比較蘋果與蘋果(OpenGL線圖與石英線圖)

讓我們面對現實吧 - OpenGL很老了,因此必須按原樣對待 - 一只老狗。 你不能教這個老狗的新技巧,但是它知道的技巧真是太棒了。

另一方面,石英是一種新的狗 - 雖然它可以做很多技巧,但它不能做得特別好 - 執行它們。 適用於中等復雜的項目,但對於任何重要的項目,我總是會推薦OpenGL,或者是一個簡單的C ++包裝器。

OpenGL絕對可以達到Quartz所能達到的水平,但是如此低的水平通常需要專家才能達到這個水平。 Quartz已經由專家編寫,只要您能夠滿足其局限性,它應該是您的繪圖應用程序的完美API。

根據我自己的經驗,我經常轉向使用Quartz定制UIKit,因為我很少需要利用OpenGL來提升性能。 當我構建自定義OpenGL實現時,通常是因為Quartz無法執行我不需要的復雜動畫,因為它在簡單的動畫上表現不佳。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM