0

我目前正在开发一个 Android 应用程序,它使用Min3D库来渲染 3D 模型(.obj 文件)。(Min3D 库是一个使用OpenGL ES的 3D 框架。)

Min3D版本的链接,我目前正在使用:https ://github.com/mengdd/min3d

我正在使用 Android Studio 进行开发,一切正常,直到我更新了所有 SDK 平台、平台工具和 Gradle 构建工具。现在的问题是,当我在模拟器上运行应用程序时,我在事件日志中收到一条错误消息(无论哪个 Android API,它都会出现在每个 API 版本中),其中说明如下:

模拟器:GL_INVALID_ENUM:glLight(f/x) 的未知参数名称 0x1600

该应用程序继续运行,但不再渲染 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 版本。

有谁知道是什么问题,或者有没有人遇到过同样的问题?有什么解决办法吗?

谢谢!!


我正在使用的当前版本:

Gradle 构建工具 26.02

Android SDK平台工具:27.01

4

0 回答 0