Я работаю над полной реализацией OpenGL ES 2.0 на C ++ для Android.
В настоящее время наша программа работает без 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: Называется нереализованным API OpenGL ES , включая код команды 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);
Но ошибка еще не исчезла.