【问题标题】:Android Native NDK OpenGL ES: unimplemented APIAndroid Native NDK OpenGL ES:未实现的 API
【发布时间】:2012-03-17 02:41:40
【问题描述】:

我正在努力为 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 native,不适用于native C++ OGLES开发。

因此,我改用了:

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

但是错误还没有消失。

【问题讨论】:

    标签: c++ opengl-es android-ndk setup-deployment native-code


    【解决方案1】:

    您是在使用真实设备(哪个?),还是在模拟器上(不支持 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)
    ...
    

    【讨论】:

    • 谢谢你!我听从了你的建议。它解决了问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-14
    • 1970-01-01
    • 1970-01-01
    • 2016-08-26
    相关资源
    最近更新 更多