2012-02-27 19 views
5

Android için C++'da tamamen OpenGL ES 2.0 uygulamak için çalışıyorum.Android Yerel NDK OpenGL ES: kullanılmayan API

Şu anda programımız JNI veya projede herhangi bir java sınıfı olmadan çalışır, bunun yerine yalnızca NativeActivity değerini kullanır. Android.mk yılında

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

dahil:

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

Ve AndroidManifest.xml

bilgilendirilir:

uygulama oluşturma kısmında kendisi üzerinde yoğunlaşırken

, biz basit bir yöntem var
<uses-feature android:glEsVersion="0x00020000"></uses-feature> 

Program, hata ayıklayıp sorun çıkarmaz.

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

Ancak setEGLContextClientVersion tür bir taşımaktadır: - Komut setEGLContextClientVersion, Android: GLES20: Called unimplemented OpenGL ES API koduna dahil

error libEGL called unimplemented OpenGL ES API 

Forum java için çalışılabilir bir öneri verir: çalıştırmak için ayarlandığında, mesaj geliyor Sarıcı yöntemi java için kastetti.

SetEGLContextClientVersion, OpenGL ES native'ye ait değildir ve yerel C++ OGLES geliştirme için geçerli olamaz.

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

Ama hata henüz gitmediyse:

nedenle, onun yerine kullanılan.

cevap

6

Gerçek aygıt kullanıyor musunuz (hangisi?), Veya taklitçiyseniz (OGL ES2'yi desteklemiyor)? Ayrıca aynı uygulamada GLESv1_CM ve GLESv2 bağlanması iyi bir fikir olup olmadığından emin değilim. OpenGL ES 2.0'ı istiyorsanız, sadece GLESv2'ye bağlantı verin.

EGL içeriğini nasıl başlattınız? EGL_OPENGL_ES2_BIT gibi EGL öznitelikleri kullandınız mı?

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

Teşekkürler! Önerinizi takip ettim. Sorunu çözdü. – ThreaderSlash