2012-02-27 3 views
5

Android 용 C++에서 OpenGL ES 2.0을 완전히 구현하려고합니다.Android Native NDK OpenGL ES : 구현되지 않은 API

현재 Google 프로그램은 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 용입니다.

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