2011-12-27 28 views

回答

4

一般來說,如果您使用Apple推薦的CADisplayLink方法繪製您的應用程序,則您無法控制刷新率。但是,您可以將frameInterval屬性設置爲大於1的值以跳過繪製框架,從而降低幀速率。例如,frameInterval = 2應該給你大約30 fps而不是60 fps。

將某些應用程序工作放在另一個線程上或優化您的繪圖任務,而不是削減幀速率可能更有用。

4

我沒有從函數中獲得「限制我的FPS率」這個術語。但爲了讓您的OpenGL應用程序運行平穩,它應該具有高達60(在iOS 5中)的FPS,並且您應該保持(我認爲限制您的情況)FPS以獲得更好的性能。

Xcode提供了許多工具來幫助您分析和調整你的OpenGL ES應用程序,如OpenGL ES Programming Guide for iOS描述:

OpenGL ES的性能偵探 - 在Xcode 4首次推出,OpenGL ES的性能偵探很快幫助你要確定OpenGL ES是否是你應用程序中的主要瓶頸;它應該是您運行的第一個工具來測試您的OpenGL ES代碼的 。 OpenGL ES Performance Detective的一個關鍵優勢是,它可以立即自動將 指向您的應用程序中的關鍵位置,從而最大限度地降低OpenGL ES性能。要使用OpenGL ES性能 偵探,啓動該工具並使用它來選擇連接到開發計算機的基於iOS的設備 上的應用程序。當您的 應用程序到達您感興趣的應用程序 中的位置時,單擊收集證據按鈕。 OpenGL ES性能 偵探記錄您的應用程序通過 系列幀生成的OpenGL ES命令,分析命令以發現關鍵的 瓶頸並提供特定的性能建議。 OpenGL ES Performance Detective可以在 /Developer/Applications/Graphics Tools /目錄中找到。

儀器(OpenGL ES的分析) - 在Xcode 4還介紹,OpenGL ES的分析工具,提供了許多功能,可幫助您 學習的OpenGL ES的應用程序的使用情況。 OpenGL ES分析工具 工具會記錄您的應用程序生成的OpenGL ES命令,當您的應用程序未遵循本編程指南中描述的最佳做法 時, 會向您發出警告;它建議您可以遵循最佳做法進行具體更改 。 OpenGL ES分析工具 允許您查看用於生成動畫的每個幀的所有命令。最後,OpenGL ES分析工具允許您選擇性地禁用部分圖形管道,以確定 管道的哪一部分是您應用程序中的重要瓶頸。 OpenGL ES分析工具爲您提供了一整套 工具來手動分析您的應用程序並瞭解其內部 的工作方式。但是,它不會自動將您指向您的應用程序目前出現瓶頸的位置 。對於 示例,即使它提供了關於如何改進OpenGL ES編碼實踐的建議,該建議並不意味着更改代碼的 會自動提高應用程序的性能 。

儀器(OpenGL ES驅動程序) - Xcode 3及更高版本提供了OpenGL ES驅動程序工具。它不直接分析應用程序提交的OpenGL ES命令。相反,它允許您監視有關圖形硬件如何被您的應用程序使用的關鍵統計信息。例如,您可以使用它來跟蹤用於保存紋理數據的 字節數以及這些數字如何從 幀變爲幀。

+0

該應用程序大量使用像素着色器。在3gs上達到60 fps是不可能的。我知道這不會很順利。 – user642252 2011-12-27 12:41:17

+0

爲了獲得更好的性能,推薦使用30fps。儘管您已經使用過沉重的圖形,但您可以使用這些工具來指導哪些渲染會降低您的FPS。我曾見過使用儀器的人們發現FPS丟失的確切問題。這些工具引導他們找到問題所在的確切代碼。 – 2011-12-27 12:46:27

4

儘管已經回答了這個問題,但我想擴展一下。

推薦的方法的確使用CADisplayLink和frameInterval來限制基本幀率,硬件中的顯示本身具有固定的刷新率,而CADisplayLink方法將硬件刷新與我們繪圖方法的調用同步,以便繪圖方法具有最需要工作的時間。

由於CADisplayLink是硬件生成的,因此您可以用它做的唯一事情就是將時間分開,這就是frameInterval所要做的。

frameInterval = 1得到你60fps的

frameInterval = 2得到你每秒30幀

frameInterval = 3得到你20 fps的

我使用了很多frameInterval = 5爲菜單,例如,它仍然給我12fps(約合理簡單動畫的最低限度),並且電池消耗急劇下降。

我也使用動態幀速率變化,通過測量平均幀速率和選擇frameInterval波紋管,有助於保持遊戲的流暢性。

FPS的這些值以外的值不是很穩定,通常會導致抖動動畫,我們必須使用的時間片是1/60秒,因此只有倍數的值會產生流動動畫。即使你不使用CADisplayLink並且做出完美的時序路由來傳遞其他東西,硬件仍然會用這個時間片來繪製。