3

私が取り組んでいる OpenGL Android プロジェクトでは、ES 2.0 が必要ですが、EGL を使用して達成することに慣れているレンダリング バッファー/サーフェスを制御する必要があります。GLSurfaceView を使用してオフスクリーン バッファーにレンダリングする方法がわかりません。その後、バッファーを表示することはありません。GLSurfaceView.EGLContextFactory を使用しても、Android の EGL パッケージ (EGL_CONTEXT_CLIENT_VERSION など) に含まれていない EGL 1.2 関数/定数がなければ、これを達成する方法は考えられません。

したがって、最初の明白な質問は、1) EGL_CONTEXT_CLIENT_VERSION と eglBindAPI() が省略されているにもかかわらず、ES 2.0 で EGL を使用する方法はありますか? 2) GLSurfaceView のコールバック surfaceCreated(EGLConfig) が呼び出される前に使用されるレンダリング コンテキストを設定するための新しい API はありますか?

4

1 に答える 1

12

デフォルトの EGLContextFactory と EGLConfigChooser を使用できる場合は、GLSurfaceView のsetEGLContextClientVersion()メソッドを使用できます。

それ以外の場合、独自のEGLContextFactoryおよびEGLConfigChooserを作成している場合は、定数を自分で定義するだけです。構成セレクターで、定義します

private static final int EGL_OPENGL_ES2_BIT = 4;

次に、これを EGL_RENDERABLE_TYPE の値として eglChooseConfig に、必要な他の属性とともに渡します。

int attribs[] = {
    EGL10.EGL_RED_SIZE,   mRedSize,
    EGL10.EGL_GREEN_SIZE, mGreenSize,
    EGL10.EGL_BLUE_SIZE,  mBlueSize,
    EGL10.EGL_ALPHA_SIZE, mAlphaSize,
    EGL10.EGL_DEPTH_SIZE, mDepthSize,
    EGL10.EGL_SAMPLE_BUFFERS, mSampleBuffers,
    EGL10.EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
    EGL10.EGL_NONE
};

コンテキスト ファクトリの場合、次のように定義します。

private static final int EGL_CONTEXT_CLIENT_VERSION = 0x3098;

コンテキストを作成するときにこれを使用します。

public EGLContext createContext(EGL10 egl, EGLDisplay display, EGLConfig eglConfig) 
{
  int[] attrib_list = {
    EGL_CONTEXT_CLIENT_VERSION, 2,
    EGL10.EGL_NONE 
  };

  EGLContext context = egl.eglCreateContext(display, eglConfig, EGL10.EGL_NO_CONTEXT, attrib_list);

  return context;
}

それらを作成したら、それらをそれぞれsetEGLContextFactoryおよびsetEGLConfigChooserに渡します。

于 2011-11-11T10:07:41.117 に答える