2010-08-04 24 views
1

現在,我正在使用Oolong Engine在iPhone上玩OpenGL ES。這可能是一個愚蠢的問題,但是在應用程序退出時,在OpenGL之後清理它有多必要?我的問題是我有一個管理加載模型的靜態向量,並且鬆散地確保模型不會被加載兩次。因此,維也納組織和紋理的所有句柄都存儲在static map<Model>Model對象中。當應用程序關閉時,地圖似乎不會調用各個Model對象上的析構函數,因此它們最終不會調用glDeleteBuffers()清理iPhone上的OpenGL後

我的問題是,這是完全必要的,如果應用程序足夠小,我永遠不會卸載並重新加載運行時的內存模型?或者OpenGL只是爲我照顧這一切?我可以創建一個從應用程序的dealloc中調用的靜態CleanUp()函數,但是值得嗎?

回答

3

當實際的應用程序退出時,所有資源都會被清除,包括所有總帳。別擔心,操作系統不會讓你的流氓應用程序意外泄漏一堆GPU資源。

在Open GL中管理資源通常是您在應用程序生命過程中應該做的事情,但聽起來您知道如何執行此操作。

+0

太棒了!它被認爲是確保它發佈的「最佳實踐」,還是它不擔心的事情之一? – Perrako 2010-08-04 02:00:52

+0

當然,這種事情是最佳實踐,但通常在所有管理數據結構的背景下。換句話說,如果你的所有數據都有很好的集合和容器,那麼他們的正常清理工作(通過析構函數或你有什麼)很可能會照顧到資源。除此之外,當流程被拆除時,不要擔心。我會說一個不好的做法是有意編寫不做清理的代碼。 (僅僅因爲你「知道你可以」而將東西從dealloc方法等中排除出去。) – 2010-08-04 04:22:42