ネイティブAndroidアプリケーションでOpenGL ES 2.0シェーダを作成することは可能です。重要なことは、適切なOpenGL ES 2.0コンテキストを使用することです。私はアプリで似たようなことをしました。つまり、ネイティブ部分のEGLコンテキストを初期化し、ネイティブコードでのみシェーダを作成(および使用)しました。私が管理していたことに基づいて、私はあなたがしたいことが完全に可能であると仮定します。
私はJavaコード(NativeAcvityメカニズムを使用していない)のエントリポイントを持っていたので、ネイティブコードでEGLサーフェスを作成するために、ネイティブウィンドウハンドル(EGLNativeWindowType
)をjavaからC++に渡さなければなりませんでした。ただし、NativeActivityの例を単純に変更する場合は、NativeActivity main.c
サンプルで示されているように、engine->app->window
を使用してEGLサーフェスを作成することができます。
OK、ネイティブコードで適切なOpenGL ES 2.0コンテキストを作成するにはどうすればよいですか?私はNativeActivityサンプルのmain.c
ファイルに2つの変更を加え、それが機能することを確認しました。
まず、以下のEGLはeglChooseConfig(display, attribs, &config, 1, &numConfigs);
に
const EGLint attribs[] = {
EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, //important
EGL_BLUE_SIZE, 8,
EGL_GREEN_SIZE, 8,
EGL_RED_SIZE, 8,
EGL_NONE
};
属性用います。
は第二に、後context = eglCreateContext(display, config, NULL, attrib_list);
で
const EGLint attrib_list [] = {EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE};
を使用するコンテキストを作成する際に、私は不変コードの残りの部分を残しました。私は、OpenGL ES 2.0が使用されていることを確認するためにいくつかの情報を印刷しました:
I/native-activity( 955): Details: [Version: OpenGL ES 2.0 1403843], [Vendor: Qualcomm], [Renderer: Adreno 205], [Extensions: GL_AMD_compressed_3DC_texture GL_AMD_compressed_ATC_texture ... ]
希望します!
おそらく役に立たない質問を申し訳ありませんが、何らかの形でEGLを初期化しましたか? OpenGLエンジンはあなたの要求を受け取る準備が整っていないと思う(getShaderInfoiv呼び出しの静かな失敗を説明できる)。 OGL 2.0ライブラリがロードされていますか? –
こんにちは、はいEGLが初期化されました –
ネイティブOpenGL開発での経験がないので、次のネイティブアクティビティの例でOpenGL ES 1.0コンテキストを残すと思います。 hello-gl2の例では、OpenGL ES 2.0の設定はJavaコード内で行われます。 – harism