2012-04-16 11 views
3

解決済み!下記の更新を参照してください。NativeActivityの再開時にOpenGL ES 2ウィンドウを再初期化

私たちは大きなC++アプリケーションをAndroidに移植しています。アプリケーションを一時停止してから再開するまでは、すべて正常に動作しています。我々はAPP_CMD_INIT_WINDOWコマンドを聞き、それが来たら、すべてのeglコマンドを再初期化してサーフェス、コンテキスト、および表示を取得します。この点の後、画面は黒です。しかし、もしglClearColorがうまく動作した後にglClearColorを設定すると、少なくともウィンドウを持っていることを意味し、描画することができます。これは、再初期化されない何かがあるかもしれないと我々に信じさせる。

私の質問は、バッファ、シェイダープログラム、または再開(または一時停止)後にクリアして再ロードする必要があるその他のキャッシュされたものがあるかどうかです。古いEGLコンテキストを使用している古いバッファを参照するアプリケーションと関係があると思われるかもしれませんが、わかりません。アプリケーションは、多くのテクスチャとオフスクリーンバッファを使用します。


アップデート:いつものように、私たちはいろいろなことを試してみたところ、投稿を作成した直後にそれを解決しました。

キャッシュされたテクスチャ、バッファ、シェーダはすべて、EGLで作成されたコンテキストハンドルに接続されています。 GLコンテキストを作成するために初期化されたいくつかのものがあります。ウィンドウの表面はそれらの1つです。これは、アプリケーションの一時停止と再開時に破棄され再作成されるANativeWindowオブジェクトに依存する唯一のオブジェクトです。したがって、これは再作成する必要がある唯一のものです。要するに

は、引数として新しいウィンドウオブジェクトで再開した後、再びeglCreateWindowSurfaceを実行します。

+0

代わりの答えと質問を更新し、あなたはそれに答える必要があります。あなた自身の質問に答えても大丈夫です。このようにして、質問はリストに未回答として表示されません。 – haffax

+0

チップをありがとう。それは私が8時間以内に私自身のクエストインに答えることができないと言ったので、誰も平均時間にそれに答えるのに時間を無駄にしないようにしたいと思った。 – Jake

+0

ああ、私は期限については知らなかった。 – haffax

答えて

4

キャッシュされたテクスチャ、バッファ、およびシェーダはすべて、EGLによって作成されたコンテキストハンドルに接続されます。 GLコンテキストを作成するために初期化されたいくつかのものがあります。ウィンドウの表面はそれらの1つです。これは、アプリケーションの一時停止と再開時に破棄され再作成されるANativeWindowオブジェクトに依存する唯一のオブジェクトです。したがって、これは再作成する必要がある唯一のものです。要するに

は、引数として新しいウィンドウオブジェクトで再開した後、再びeglCreateWindowSurfaceを実行します。

0

が、私は他のすべてを再利用しながら、eglCreateWindowSurfaceとeglMakeCurrentの両方を呼び出す必要があった、それが働いた(アンドロイド4.2)

関連する問題