2011-01-26 86 views
0

我正在使用緩衝區來將非常大的圖片(屏幕大小)加載到單個表面。 這個想法是一幀一幀地動畫大量的圖片(超過視頻內存可以存儲)。關於在IOS opengl上快速交換紋理ES

我已經創建了一個用於製作緩衝區的代碼,但是我在加載位圖的時候遇到了很大的問題。

我的代碼工作的:

  1. 我加載本地的位圖文件路徑的數組。

  2. 我(想)我preload我的位圖數據在內存中。我用一個線程在NSArray中爲我的所有圖片存儲一個CGImageRef(40時刻)

  3. 在第二個線程中,代碼看另一個NSArray以確定是否爲空,如果是空的,我通過創建紋理將我的cgimageRef綁定到視頻內存。 (爲此使用共享組) 該數組存儲20個紋理名稱的地址,並直接由openGL用於繪製表面。這個數組是我的(緩衝區)

當我玩我的動畫,我從我的「緩衝區」和我的線程(在點3)加載一個新紋理刪除舊紋理。

它的工作很棒,但速度非常慢,幾秒鐘後動畫就會缺失。

你能幫我優化我的代碼嗎?

回答

1

取決於設備和iOS版本glTexImage只是很慢。 隨着iOS 4的性能進行了改進,這樣就可以期望在第二代設備體面的速度也和體面我的意思是每幀的一個或兩個紋理上傳... 總之: 使用glTexSubImage和重用已經創建的紋理標識。 此外,使用glTex(Sub)圖像時,請嘗試使用未用於在該幀中進行渲染的紋理ID。我的意思是:添加一些紋理ID雙緩衝。 我假設你在同一個線程中完成所有GL的工作,如果不改變的話。