2011-02-07 29 views
1

如何檢測我的紋理在android上被破壞? 我對我的GLSurfaceView渲染器類目前看起來是這樣的:如何檢測紋理何時被破壞

public void onDrawFrame(GL10 gl) 
{ 
    nativeLibrary.drawFrame(); 
} 
public void onSurfaceChanged(GL10 gl, int width, int height) 
{ 
    if (reload) 
    { 
     library.glRecreate(); //this method reloads destroyed textures 
    } 
    else 
    { 
     nativeLibrary.init(width, height)); //this method initializes my game 
     reload = true; 
    } 
} 
public void onSurfaceCreated(GL10 gl, EGLConfig config) 
{ 
} 

的問題是,並不總是奏效。當我按下我的遊戲中的主頁按鈕,然後再次啓動它時,它就像一個魅力。但是,當我鎖定設備,然後再次解鎖時,所有紋理都只是黑色。當我鎖定時,一切似乎都會重置(我的遊戲總是回到主菜單中)。當我使用主頁按鈕退出遊戲並在此之後進行鎖定/解鎖時,遊戲不會重置。

+0

也許一個重要的細節:它以前的工作。當時我手動創建了我的GLSurfaceView,現在我通過xml加載它。 – Brammie 2011-02-14 15:14:10

+0

如果你回去手動創建它,它是否會再次工作?大多數(如果不是全部的話)示例在代碼中創建GLSurfaceView。我想我曾嘗試從XML創建它,不記得它爲什麼失敗。 – Thomas 2011-02-14 18:05:24

回答

3

在Android上做的OpenGL,我高度建議您收看由克里斯PRUETT,Android的主張,誰寫的開源遊戲Replica Islandthesetwo谷歌I/O會談。

Here他談到了你所看到的確切問題。長話短說:你不檢測你的紋理(和緩衝區)什麼時候被破壞,但你檢測什麼時候需要重新創建。而這也正是onSurfaceCreated回調是:

由於該方法被調用的渲染,以及每次EGL上下文丟失時間的開始,這種方法是把代碼來創建一個方便的地方在渲染開始時需要創建的資源,以及在EGL上下文丟失時需要重新創建的資源。紋理是您可能想要在此創建的資源的示例。