2011-02-07 14 views
1

アンドロイドでテクスチャが破壊されたときはどうすれば検出できますか? 私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) 
{ 
} 

問題は、それが常に動作しませんです。ゲームのホームボタンを押してからもう一度やり直すと、それは魅力のように機能します。しかし、私はデバイスをロックし、再びそれをロック解除すると、すべてのテクスチャは黒だけです。ロックするとすべてがリセットされているように見えます(私のゲームは常にメインメニューに戻ります)。ホームボタンを使用してゲームを終了し、その後にロック/アンロックを行うと、ゲームはリセットされません。 Android上でOpenGLを行う場合

+0

多分重要な詳細です。それから、私はGLSurfaceViewを手動で作成しました。今はxmlを通して読み込みます。 – Brammie

+0

また、手動で作成することに戻った場合は、再度動作しますか?すべてではないにしてもほとんどの例は、GLSurfaceViewをコードで作成します。私は実際にXMLから一度それを作成しようとしたと思います。失敗した理由を思い出さないでください。 – Thomas

+0

問題はどこかにありました。画面をロックすると、画面の向きが元に戻って戻ります。これは実際に(onDestroyが呼ばれるように)アプリケーションを殺すが、何とかアンドロイドがそれを覚えていない、そして画面のロックを解除するときにただonResume私のゲーム。 System.exit(0)を呼び出すとき。 onDestroyでは、ロックを解除するとゲームが終了しました。 – Brammie

答えて

3

は、私は非常にあなたは、オープンソースのゲームReplica Islandを書いたクリスPruett、Androidの提唱者によるthesetwo GoogleのI/O会談を見ることをお勧めします。

Hereあなたは、あなたが見ている正確な問題について話しています。ストーリーは短いです。テクスチャ(とバッファ)が破棄されたときは検出されませんが、再作成が必要なときは検出されます。この方法は、レンダリングの開始時に呼び出さだけでなく、EGLコンテキストが失われるたびに、このメソッドが作成するコードを置くのに便利な場所ですので

:そして、これはonSurfaceCreatedコールバック用ですまさにですレンダリングの開始時に作成する必要があり、EGLコンテキストが失われたときに再作成する必要があるリソーステクスチャはここで作成したいリソースの例です。

+0

クリスは間違いなくAndroid用ゲームを書くのがずっと簡単になっています。彼の仕事が大好き。 – jluzwick

+0

これはうまくいきません!私が画面のロックを解除すると、たとえすべての読み込み用のものをonSurfaceCreatedに移動したとしても、テクスチャは黒くなります – Brammie

+0

テクスチャオブジェクト(つまり 'glGenTextures')を再作成していて、それらのIDが同じでないかもしれない? – Thomas

関連する問題