1

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

問題は、それが常に機能するとは限らないことです。ゲームのホームボタンを押してからもう一度起動すると、魔法のように機能します。しかし、デバイスをロックしてから再度ロックを解除すると、すべてのテクスチャが真っ黒になります。ロックするとすべてがリセットされるようです (私のゲームは常にメイン メニューに戻ります)。ホームボタンでゲームを終了し、その後ロック/アンロックを行ってもゲームがリセットされません。

4

1 に答える 1

3

Android で OpenGL を使用する場合は、Android 支持者であり、オープンソース ゲームのReplica Islandを作成した Chris Pruett による2 つのGoogle I/O トークを視聴することを強くお勧めます

ここで彼は、あなたが見ている正確な問題について語っています。簡単に言うと、テクスチャ (およびバッファ) が破棄されたときは検出されませんが、再作成が必要なときは検出されます。そして、これはまさにonSurfaceCreatedコールバックの目的です:

このメソッドはレンダリングの開始時に呼び出されるだけでなく、EGL コンテキストが失われるたびに呼び出されるため、このメソッドは、レンダリングの開始時に作成する必要があり、再作成する必要があるリソースを作成するためのコードを配置するのに便利な場所です。 EGL コンテキストが失われたとき。テクスチャは、ここで作成するリソースの例です。

于 2011-02-07T18:51:11.730 に答える