3

Android アプリで、レンダラーからアクティビティを切り替えたいと考えています。Renderer を作成するとき、コンストラクターにコンテキストを渡します。onDrawFrame 関数のレンダラーで:

public MyRenderer(Context ctx){

    this.context=ctx;
}

public void onDrawFrame(GL10 gl) {

    testFlag = renderFrame();


    if(testFlag > 0)
    {
        Intent myIntent = new Intent(this.context, MyActivity.class);
        myIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        this.context.startActivity(myIntent);
        testFlag = 0;
        return;
    }


}

これは、いくつかの OpenGL スタッフを処理するメイン アクティビティで onPause() を呼び出します。

アクティビティを切り替えるときにエラーが発生します。

その時点で、次のエラーが表示されます。

現在のコンテキストを持たない OpenGL ES API の呼び出し (スレッドごとに 1 回ログに記録されます)

誰でも私を助けてもらえますか?これは、OpenGL スレッドから OpenGL への呼び出しが行われていないために発生していることに気付きましたが、どうすれば修正できますか??

レンダラー内からアクティビティを切り替える適切な方法は何ですか?

4

2 に答える 2

0

GLSurfaceView.Renderer ドキュメントから:

スレッディング
レンダリング パフォーマンスが UI スレッドから分離されるように、レンダラーは別のスレッドで呼び出されます。クライアントは通常、UI スレッドからレンダラーと通信する必要があります。これは、入力イベントが受信される場所であるためです。クライアントは、クロススレッド通信用の標準的な Java 技術のいずれかを使用して通信できます。または、 queueEvent(Runnable) 簡易メソッドを使用できます。

onPause()メソッドから投稿されたそのような Runnable を介して、OpenGL 呼び出しを正しく実行できるはずです。

GLスレッドからアクティビティの切り替えを開始しているという事実は問題の一部ではないと思います(少し奇妙に思えますが、それには正当な理由があると思います:))。

于 2015-05-16T18:53:45.180 に答える