2013-05-10 84 views
0

我正在做一個iOS遊戲,並希望使用這種方法進行碰撞檢測。CGPathContainsPoint()硬件是否加速?

由於有很多(50+)點來檢查每一幀,我想知道這個方法是否運行在iDevice的圖形硬件上。

+3

我會測量並看看它是如何執行的(在真實設備上)。如果它減慢它們,也許你可以通過首先測試路徑的邊界框來過濾這些點。 – 2013-05-10 14:54:13

+0

謝謝!是的,我必須先檢查邊界框! – bijan 2013-05-10 17:19:24

回答

4

繼續@DavidRönnqvist點:無論它是否是「硬件加速」或不。重要的是它是否足夠快達到您的目的,然後您可以使用樂器來檢查它在哪裏吃東西並嘗試改進。將代碼移動到GPU並不會自動使其更快;它實際上可能會讓速度變慢,因爲你必須將所有的數據傳送到GPU內存,這很昂貴。理想情況下,要在GPU上運行,您需要移動所有數據一次,然後執行大量昂貴的矢量操作,然後將數據移回(或將其放在屏幕上)。如果你不能讓問題看起來像那樣,那麼GPU不是正確的工具。

它可能是NEON加速的,但這又是一種無關緊要的事情;編譯器NEON加速了很多事情(並且在NEON上運行並不總意味着它運行得更快)。也就是說,如果您可以針對相同的曲線測試多個點(數百或數千),那麼我敢打賭,這種問題在NEON上運行得最好。

你應該假設CGPathContainsPoint()寫成對於「我有一個隨機曲線和一個隨機點」的一般情況來說相當快。如果您的問題看起來如此,您似乎不太可能在自己的硬件上擊敗蘋果工程師(50分並不比1多)。舉例來說,我假設他們已經在爲你檢查邊界框,並且你的重新檢查正在浪費時間(但我確定它是這樣描述的)。

但如果你可以改變問題到別的東西,比如「我有十萬點的已知曲線和十」,那麼你或許可以手工編寫一個更好的解決方案,應該看看加快,甚至手寫NEON攻擊它。

簡介第一,然後優化。即使你的問題是「骯髒的」,也不要認爲「矢量處理器」完全等同於「快速」。圖形處理器更是如此。

+0

謝謝你的隊友,你的出色答案。它幫助我真正理解了這個問題,並且我學到了一些東西! – bijan 2013-05-11 11:14:58