2010-09-02 74 views
1

我有一個渲染3D模型的OpenGL視圖。這是對蘋果EAGLView的基本修改。這個視圖被添加到控制器的.view中,並用presentModalViewController顯示:。我希望在用戶選擇顯示視圖之前在應用程序啓動時在後臺線程中完成所有模型加載和OpenGL狀態配置。這可能嗎?我可以加載紋理,設置燈光,並且通常只需準備好在後臺線程中渲染一切?我擔心的是,當我在後臺設置我的渲染器時,主要應用程序的Cocoa touch部分將操縱OpenGL狀態。控制器當然會從主線程顯示。 OpenGl-ES的這種級別的理解並不是我經常處理的事情,所以如果我的問題在任何方面都很奇怪,請將其作爲異教徒:)在後臺加載OpenGl視圖。 iPhone

回答

1

絕對可以在線程上進行後臺加載。一些關鍵點: - 將OGL狀態設置移動到後臺線程可能沒有太大的成功 - 第一次繪製開始之前在上下文中引起的總變化量不會相加到一噸時間。後臺加載對於紋理和VBO非常有用,並且首先需要加載時間才能將數據提供給GL。 - 您需要從主線程分離上下文並將其移至工作線程。我們使用pthreads將上下文「發送」給工作人員。 - 在我們的使用中,我們隱藏GL視圖以確保它在加載狀態時不需要繪製。 (坦率地說,在加載期間,它可能不包含任何有用的東西。)因此,在異步加載期間,可見UI全部爲非GL可可。

這種方法比您在桌面上做的要困難得多:只需在兩個上下文中共享對象(以便您可以同時加載和繪製)。當我們在一年多前研究這種方法時,內部監督辦公室是不可能的;現在可能有可能,我不知道。