私のアプリは 2 つのアクティビティで構成されています。典型的な Android UI ウィジェットを使用する通常のアクティビティと、JNI ベースの OpenGL ES ビューを使用する他のアクティビティです。
アプリは両方のアクティビティを切り替えるので、アクティビティを終了する前に OpenGL リソースを適切に解放する必要があると思います。(glDeleteProgram、glDeleteBuffers、glDeleteTextures を呼び出して ...)
hello-gl2 のサンプルを参照しましたが、OpenGL のセットアップ コードのみで、OpenGL の破棄/シャットダウン コードはありません。そのため、ネイティブの OpenGL リリース メソッドをどこで呼び出せばよいかわかりません。
次の 2 つの場所を試しましたが、エラー メッセージが表示されました。
E/libEGL(7224): 現在のコンテキストのない OpenGL ES API への呼び出し (スレッドごとに 1 回ログに記録)
class MyGLView extends GLSurfaceView
{
...
private static class ContextFactory implements GLSurfaceView.EGLContextFactory {
public EGLContext createContext(EGL10 egl, EGLDisplay display, EGLConfig eglConfig) { ... }
public void destroyContext(EGL10 egl, EGLDisplay display, EGLContext context) {
// call native shutdown method, location #1
}
}
public void surfaceDestroyed(SurfaceHolder holder)
{
// call native shutdown method, location #2
}
...
public class Renderer implements GLSurfaceView.Renderer
{
public void onSurfaceCreated(GL10 gl, EGLConfig config)
{
// call native initialization method here: Works fine!
}
// no surface destroy callback method in GLSurfaceView.Renderer
}
}
OpenGL リソースを正常に解放できる場所はどこですか? またはネイティブ部分で現在の OpenGL コンテキストを設定する方法は何ですか?