2

なんらかの理由で、EGL コンテキスト クライアント バージョンが OpenGL アプリケーションに設定されません。以下を実行するだけでコンテキストをセットアップします。

final boolean supportEs2 = configurationInfo.reqGlEsVersion >= 0x20000;

        if (supportEs2) { //<-- this resolves to true.


            mGLView.setEGLContextClientVersion(2);

            try {
                mGLView.setRenderer(new PongDroidRenderer(getApplicationContext()));
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

その後、シェーダーをコンパイルしようとすると、コンテキストが正しく呼び出されないためにランタイム例外が発生します。いくつかの調査の結果、メインスレッドから OpenGL を呼び出すことができないことがわかりましたが、アプリケーション自体がマルチスレッド化されていないことを知っている限り(もちろん、システムはマルチスレッド化されています)。ですから、ここにいる誰かがこれをどのように機能させることができるかについて何か考えがあるかどうかを知りたいと思っています.

4

2 に答える 2

3

glSurfaceView を使用していますか? opengl コンテキストは、surfaceview スレッド (onDrawFrame、onSurfaceChanged、onSurfaceCreated などを呼び出すスレッド) からのみ有効です。これらのコールバックでシェーダーをコンパイルする必要があります。

于 2012-04-29T01:32:35.027 に答える
3

OpenGL 2.0 は Android 2.2 以降でサポートされているため、サポートされている Android の最小 API バージョンを 8 に設定する必要があります。バージョンを低く設定した場合は、 で、またはティムが言ったように、setEGLContextClientVersion()メソッドを呼び出す必要があります。onSurfaceCreated()onSurfaceChanged()onDrawFrame()

于 2012-05-10T13:44:52.907 に答える