gl_invalid_enum - 问题

时间:2018-01-23 11:56:01

标签: android opengl-es android-emulator min3d

我目前正在开发一款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

0 个答案:

没有答案