如何检测纹理何时被破坏

时间:2011-02-07 18:37:40

标签: java android opengl-es-2.0

我如何检测我的纹理在Android上被销毁的时间? 我的GLSurfaceView的我的Renderer类目前看起来像这样:

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) 
{
}

问题是并不总是有效。当我从我的游戏中按下主页按钮然后再次启动它时,它就像一个魅力。但当我锁定设备,然后再次解锁时,所有纹理都只是黑色。当我锁定它时,一切似乎都会重置(我的游戏总是在主菜单中返回)。当我使用主页按钮退出游戏并在此之后进行锁定/解锁时,游戏不会重置。

1 个答案:

答案 0 :(得分:3)

在Android上执行OpenGL时,高度建议您观看由开源编写的Android倡导者Chris Pruett撰写的these two Google I / O会谈游戏Replica Island

Here他谈到了你所看到的确切问题。长话短说:您没有检测到纹理(和缓冲区)何时被破坏,但您检测到何时需要重新创建它们。这正是onSurfaceCreated回调的用途:

  

由于在渲染开始时调用此方法,以及每次丢失EGL上下文时,此方法都是放置代码以创建在渲染开始时需要创建的资源的便利位置,并且需要在EGL上下文丢失时重新创建。纹理是您可能希望在此处创建的资源的示例。