Android 用の C++ で OpenGL ES 2.0 を完全に実装する作業を行っています。
現在、私たちのプログラムは、JNI やプロジェクト内の Java クラスなしで実行され、代わりに NativeActivity のみを使用しています。
アプリケーションのレンダリング部分自体に焦点を当てると、簡単な方法が得られました。
renderWorld()
{ GLfloat vVertices[] = { 0.0f, 0.5f, 0.0f,
-0.5f, -0.5f, 0.0f,
0.5f, -0.5f, 0.0f };
glClear ( GL_COLOR_BUFFER_BIT );
glVertexAttribPointer ( 0, 3, GL_FLOAT, GL_FALSE, 0, vVertices );
glEnableVertexAttribArray ( 0 );
glDrawArrays (GL_TRIANGLES, 0, 3 );
}
Android.mk には以下が含まれていました。
LOCAL_LDLIBS := -landroid -llog -lEGL -lGLESv1_CM -lOpenSLES -lGLESv2
そして AndroidManifest.xml で通知されます:
<uses-feature android:glEsVersion="0x00020000"></uses-feature>
したがって、プログラムは問題なくデバッグおよびコンパイルされます。実行するように設定すると、次のメッセージが表示されます。
error libEGL called unimplemented OpenGL ES API
フォーラムは、java - Android: GLES20: Called unimplemented OpenGL ES APIで実行可能な提案を提供し、コマンド setEGLContextClientVersion: をコードに含めます。
GLSurfaceView surfaceView = new GLSurfaceView(this);
surfaceView.setEGLContextClientVersion(2);
ただし、setEGLContextClientVersion は、Java 用の一種のラッパー メソッドです。
setEGLContextClientVersion は OpenGL ES ネイティブに属しておらず、ネイティブ C++ OGLES 開発には適用できません。
したがって、代わりに使用しました:
const EGLint attribList[] = {EGL_CONTEXT_CLIENT_VERSION, 2,EGL_NONE};
mContext = eglCreateContext(mDisplay, lConfig, EGL_NO_CONTEXT,attribList);
しかし、エラーはまだ消えていません。