Java 在Android 5.0中,对glGetString()的静态调用返回null

Java 在Android 5.0中,对glGetString()的静态调用返回null,java,android,opengl-es,Java,Android,Opengl Es,在启动之前,我的应用程序需要检查一些OpenGL ES功能的可用性 这是通过以下Java代码完成的: String extensions = GLES20.glGetString( GLES20.GL_EXTENSIONS ); 它在安卓4.4版之前都能工作,但现在返回空值,日志显示 10-28 17:53:49.475: E/libEGL(8930): call to OpenGL ES API with no current context (logged once per thread)

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

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

String extensions = GLES20.glGetString( GLES20.GL_EXTENSIONS );
它在安卓4.4版之前都能工作,但现在返回空值,日志显示

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

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

首先,这可能不是升级问题,而是特定于设备的问题。也许(你的手机在数千种型号的手机上没有足够的统计数据),glGetString()这种行为不太可能发生在老款手机上,但这些知识不值得去寻找,无论如何也无助于解决问题

说明所有OpenGL函数都需要实时渲染GL上下文才能正常工作,但在没有此类上下文的情况下调用某些函数时返回非NULL并不违反

您可以找到初始化代码的示例和

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


因此,我们必须采用回退策略,以便当此函数返回null

时,应用程序不会崩溃。在创建OpenGL上下文之前,您不能运行GL函数。当静态初始值设定项运行时,很可能没有。这就是我不理解的。它一直有效,但在安卓5.0上不再有效。有没有办法创建一个“虚拟”上下文并调用这个静态函数?我不知道Android编程,但我怀疑Android为您设置了上下文,5.0之前的版本在初始化静态变量之前就已经设置好了,而5.0+版本则没有。不要在静态上下文中进行检查,而是在第一次开始绘图时进行检查。“开始绘图”是由另一个活动中的JNI函数完成的,应用程序在开始绘图之前需要这些信息。我不在静态初始值设定项上下文中,应用程序的主要活动已经在屏幕上。只有glGetString函数是静态的。