2012-02-27 22 views
5

私はOpenGL ES 2.0をAndroid用にC++で完全に実装しようとしています。Android Native NDK OpenGL ES:実装されていないAPI

現在のところ、私たちのプログラムは、JNIやプロジェクト内のJavaクラスなしで、代わりにNativeActivityを使用して実行されます。部品自体のレンダリングアプリケーションに焦点を当て

は、我々は簡単な方法だ:Android.mkで

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); 
} 

が含まれていました:

LOCAL_LDLIBS := -landroid -llog -lEGL -lGLESv1_CM -lOpenSLES -lGLESv2 

とのAndroidManifest.xmlには通知された:

<uses-feature android:glEsVersion="0x00020000"></uses-feature> 

したがって、プログラムは問題なくデバッグしてコンパイルします。

GLSurfaceView surfaceView = new GLSurfaceView(this); 
    surfaceView.setEGLContextClientVersion(2); 

はしかし、setEGLContextClientVersionはの一種である: - コードコマンドsetEGLContextClientVersionに含め、Android: GLES20: Called unimplemented OpenGL ES API

error libEGL called unimplemented OpenGL ES API 

フォーラムは、Javaのための実行可能な提案を与える:実行するように設定すると、メッセージが来ますJava用のラッパーメソッド。

setEGLContextClientVersionはOpenGL ESネイティブに属しておらず、ネイティブC++ OGLES開発には適用できません。

const EGLint attribList[] = {EGL_CONTEXT_CLIENT_VERSION, 2,EGL_NONE}; 
mContext = eglCreateContext(mDisplay, lConfig, EGL_NO_CONTEXT,attribList); 

しかし、エラーがまだ消えていません。

はしたがって、私が代わりに使用しました。

答えて

6

実デバイス(?)を使用していますか、またはエミュレータ(OGL ES2をサポートしていません)にいますか?また、同じアプリケーションでGLESv1_CMとGLESv2をリンクするのが良い考えかどうかはわかりません。 OpenGL ES 2.0が必要な場合は、GLESv2にのみリンクしてください。

どのようにEGLコンテキストを初期化しましたか? EGL属性EGL_OPENGL_ES2_BITを次のように使用しましたか?

EGLint aEGLAttributes[] = 
{ 
    EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, // <--- OpenGL ES 2.0 
    ... 
    EGL_NONE 
}; 
... 
eglChooseConfig(m_EGLDisplay, aEGLAttributes, aEGLConfigs, 1, 
      &cEGLConfigs) 
... 
+0

ありがとうございました!私はあなたの提案に従った。それは問題を解決しました。 – ThreaderSlash

関連する問題