我有一个应用程序,我试图在三星galaxy tab 3(Android 4.4.2)和nexus 7(Android 5.0)上运行。该应用程序可以使用Opengl ES 2.0或opengl ES 3.0。当我使用Opengl ES 2.0时,它在两个平板电脑上都能正常工作。当我使用OpenGL ES 3.0时,我收到错误。我的Android.Manifest文件如下,我根据opengl es version
更改它<uses-feature android:glEsVersion="0x00030000"/>
<uses-sdk android:minSdkVersion="19"/>
我正在通过以下代码
创建上下文private static int EGL_CONTEXT_CLIENT_VERSION = 0x3098;
public EGLContext createContext(EGL10 egl, EGLDisplay display, EGLConfig eglConfig) {
Log.w(TAG, "creating OpenGL ES 3.0 context");
checkEglError("Before eglCreateContext", egl);
int[] attrib_list = {EGL_CONTEXT_CLIENT_VERSION, 3, EGL10.EGL_NONE };
EGLContext context = egl.eglCreateContext(display, eglConfig, EGL10.EGL_NO_CONTEXT, attrib_list);
checkEglError("After eglCreateContext", egl);
return context;
}
我创建了一个configChooser类,它也使用了以下配置。我正在使用它与Opengl es 2.0和3.0。我不确定是否需要为opengl 3.0更改它。我
private static int EGL_OPENGL_ES2_BIT = 4;
private static int[] s_configAttribs2 =
{
EGL10.EGL_RED_SIZE, 4,
EGL10.EGL_GREEN_SIZE, 4,
EGL10.EGL_BLUE_SIZE, 4,
EGL10.EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
EGL10.EGL_NONE
};
我的Application.mk如下
APP_ABI := armeabi-v7a
以下是错误
三星Galaxy标签3
它说 dlopen失败了:libraryname.so有意想不到的电子机器:40 。我搜索并发现这个错误来自我的设备架构不同,我应该用 APP_ABI:= x86 构建,但我不认为这是因为当我使用opengles 2.0时,一切都是工作正常。对于opengles 2.0和opengles 3.0,我的设备架构将保持相同,如果它在opengles 2.0中工作,它也应该在opengles 3.0中工作。我仍然尝试使用 APP_ABI:= x86 并且它给出了以下错误 java.lang.RuntimeException:CreateContext失败:ELG_SUCCESS 我认为它在这种情况下无法创建上下文。我还附上错误屏幕截图
我还尝试直接调用setEGLContextClientVersion函数,而不在渲染器上调用setEGLContextFactory和setEGLConfigChooser。我得到同样的“dlopen失败:libraryname.so有意想不到的电子机器:40。”
Nexux 7 当我在Nexus上运行我的应用程序时,错误是
被称为未实现的opengl es api
当我在本机代码中调用绘图函数时会出现此错误。由于无法调试我的本机代码,因此无法查明确切的命令。我正在使用VAO和VBO绘制。当我使用opengl es 2.0时,它工作正常。我只使用VBO来绘制代码。
我还尝试直接调用setEGLContextClientVersion(3)而不在渲染器上调用setEGLContextFactory和setEGLConfigChooser。在这种情况下,我得到“java.lang.IlegalArgumentException:No Configs match configSpecs”错误