gpt4 book ai didi

c++ - 安卓 native NDK OpenGL ES : unimplemented API

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:26:11 34 4
gpt4 key购买 nike

我正在努力为 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);

但是错误还没有消失。

最佳答案

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

关于c++ - 安卓 native NDK OpenGL ES : unimplemented API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9468175/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com