2011-11-14 105 views
1

我試圖在我的遊戲場景的構造函數中同時加載所有遊戲數據。但是它失敗了,因爲紋理加載只能在opengl上下文中工作,就像從draw frame或surfacechanged調用load方法一樣。但是我認爲在並條機首次調用或類似的東西時加載紋理是很難看的。那麼是否有可能將我的加載部分與opengl函數分開?隨機加載紋理

回答

3

我有完全相同的問題。 我的解決方案是使用proxy textures。這意味着,當您使用內存或文件中的某些數據創建紋理時,您將創建包含該內存數據或文件路徑副本的虛擬紋理(您可以將數據預加載到內存中以加快載入速度)。

之後,我的渲染器調用bind()(這與glBindTexture類似),我檢查是否有數據要加載,如果存在,我只是創建新的紋理並加載數據。

這種方法最適合我,因爲在我的情況下紋理可以從任何線程和任何時候創建。

但是如果你想預加載所有紋理你可以做,在onSurfaceCreatedonSurfaceChanged

這同樣適用於緩衝區。

另一種方法是使用本地活動(檢查NDK示例)。在這種情況下,您可以手動處理上下文,但它需要API級別9.

1

但我覺得在並條機首次調用或類似的東西時加載紋理是很難看的。

實際上,延遲紋理加載是最優雅的方法。這是允許遊覽世界而不中斷加載屏幕的遊戲的關鍵要素之一。只是不要試圖一次加載整個世界,而是儘快加載它們即將變得可見的東西。使用像素緩衝區對象異步執行操作。