2011-03-22 53 views
0

我們有一個即將到來的項目,要求我們將紋理圖像信息推送到iPad應用程序的EAGLView。一般來說,對於OpenGL來說,綠色是否會對錶面等待紋理信息產生影響? OpenGL在等待圖像數據時會做什麼? OpenGL是否需要對其紋理進行持續更新,還是保留數據直到我們再次更新紋理?我們不會在視圖中產生循環或任何東西,但更像是觀察者模式。將紋理信息推送到iPad的OpenGLES - 含義?

回答

1

當你上傳一個紋理時,你把它交給GPU--所以在你沒有直接訪問的內存中進行拷貝。然後可以根據需要多次繪製。所以不需要持續更新。

OpenGL在等待圖像數據時不會做任何事情,它是一個同步API。上傳數據的過程需要花費時間,紋理對象事先沒有與之關聯的圖形,之後會有與之關聯的任何圖形。

在一般情況下,OpenGL對象(包括紋理對象)屬於特定的上下文,上下文屬於特定的線程。但是,iOS實現了share groups,它允許您將多個上下文放入共享組中,允許在它們之間共享對象,但必須注意同步。

iOS提供了CALayer的一個特定子類,CAEAGLLayer,您可以使用它從OpenGL進行繪製。當你畫畫和多久時,這取決於你。所以你的方法是更原生的方法,如果有的話。很多樣品包裝

顯然嘗試'最主要的線程上的一切'的最簡單的方法。如果你沒有做那麼多,那麼它可能會足夠快,並節省代碼維護。但是,上傳的代價可能會超出您的預期,因爲OpenGL的工作方式是指定數據及其格式,OpenGL根據您所使用的特定GPU對其進行重新排列。我們正在討論的是第二類0.3的數量而不是30秒,但是如果用戶點擊按鈕或嘗試同時移動滑塊,那麼就會有明顯的暫停。所以如果保持主線程的響應證明是一個問題,我想你會想跳到後臺線程,在主線程上創建一個新的上下文,在同一個共享組上,然後跳回去做實際的繪圖。在這種情況下,如何與用戶交流數據已收到並正在處理中,與尚未收到數據的情況截然不同,如果差距足夠大,則無法證明這一點。

+0

是的,我們首先在主線程中解決這個問題。我喜歡你的帖子,內容非常豐富。感謝您的信息 :) – DavidAndroidDev 2011-03-23 14:14:54