Android 5.0 中静态调用 glGetString() 返回 null

G B*_*G B 4 java android opengl-es

我的应用程序需要在启动之前检查某些 OpenGL ES 功能的可用性。

这是通过以下 Java 代码完成的:

String extensions = GLES20.glGetString( GLES20.GL_EXTENSIONS );
Run Code Online (Sandbox Code Playgroud)

它可以在 Android 4.4 版本之前运行,但现在返回 null,日志显示

10-28 17:53:49.475: E/libEGL(8930): call to OpenGL ES API with no current context (logged once per thread)
Run Code Online (Sandbox Code Playgroud)

在 Android 5.0 上如何获取此信息?我需要创建新的 OpenGL ES 上下文吗?最简单的方法是什么?

Ale*_*ohn 5

首先,这可能不是升级问题,而是特定于设备的问题。也许(你的确实没有足够的跨数千种设备型号的统计数据),glGetString()的这种行为在旧型号上不太可能发生,但这样的知识不值得寻求,对无论如何解决问题。

khronos wiki解释说,所有 OpenGL 函数都需要实时渲染 GL 上下文才能工作,但其中一些函数在没有此类上下文的情况下调用时返回非 NULL 并不违反。

您可以在此处此处找到初始化代码的示例。

即便如此,我们还是遇到了一些设备为glGetString(GLES20.GL_RENDERER)返回 NULL ;它们具有不同的制造商、平台级别等。我们的 Crashlytcis 数据并不表明这种行为对于同一设备是一致的。

因此,我们必须采用后备措施,以便当该函数返回null时应用程序不会崩溃。