我目前正在开发一款Android应用,它使用 Min3D 库来渲染3D模型(.obj文件)。 (Min3D lib是一个使用 OpenGL ES 的3D框架。)
链接到Min3D版本,我目前正在使用:https://github.com/mengdd/min3d
我正在使用Android Studio进行开发,一切正常,直到我更新所有SDK平台,平台工具和Gradle构建工具。 现在的问题是,当我在模拟器上运行应用程序时,我在事件日志中收到错误消息(无论哪个Android API,它出现在每个API版本中),以下内容:
“模拟器:GL_INVALID_ENUM:glLight的未知参数名称0x1600(f / x)”
应用程序一直在运行,但它不再渲染3d模型。 但在真实设备上显示了3D模型,但信息出现了。
错误: 它出现在文件GLSurfaceView.java中,它是Android SDK的一部分:
/**
* Display the current render surface.
* @return the EGL error code from eglSwapBuffers.
*/
public int swap() {
if (! mEgl.eglSwapBuffers(mEglDisplay, mEglSurface)) {
return mEgl.eglGetError();
}
return EGL10.EGL_SUCCESS;
}
当调用eglSwapBuffers()时,if语句中会发生错误。变量mEgl是EGL10类型,它在文件EGL10.java中声明(也是Android SDK的一部分)。 在EGL10.java中声明了几个错误代码:
public interface EGL10 extends EGL {
int EGL_SUCCESS = 0x3000;
int EGL_NOT_INITIALIZED = 0x3001;
int EGL_BAD_ACCESS = 0x3002;
int EGL_BAD_ALLOC = 0x3003;
int EGL_BAD_ATTRIBUTE = 0x3004;
int EGL_BAD_CONFIG = 0x3005;
int EGL_BAD_CONTEXT = 0x3006;
int EGL_BAD_CURRENT_SURFACE = 0x3007;
int EGL_BAD_DISPLAY = 0x3008;
int EGL_BAD_MATCH = 0x3009;
// and so on
// ...some other declarations
}
要考虑的一件事是,我收到的错误消息的0x1600代码未在此文件中声明。我不确定 这是否是问题。我也不知道问题是由Min3D库引起的还是Android SDK中的错误。 也许Min3D库与新的Android SDK版本不兼容。
有谁知道问题是什么,或者有人面临同样的问题?任何解决方案?
THX !!
我正在使用的当前版本:
Gradle构建工具26.02
Android SDK平台工具:27.01