我真的需要有人帮助了解我所面临的问题。我试图从以下行获取GPU信息:
renderer = GLES20.glGetString(GLES20.GL_RENDERER);
vendor = GLES20.glGetString(GLES20.GL_VENDOR);
version = GLES20.glGetString(GLES20.GL_VERSION);
如果我从" OnCreate"执行这些行。我接收错误的活动方法" E / libEGL(4380):调用没有当前上下文的OpenGL ES API(每个线程记录一次)"在logcat中返回空值。
但是,如果我通过按钮执行这些行,请点击我收到结果。
你能否帮助我确定我在做什么错误,或者我还有其他需要学习的事情吗?
如果从onCreate方法执行,我如何获得结果?
答案 0 :(得分:2)
问题正是错误消息告诉您的:您在没有当前OpenGL上下文的情况下尝试进行OpenGL调用(glGetString
)。 OpenGL调用需要您正在进行调用的线程中的当前上下文。
OpenGL的典型用法包括使用GLSurfaceView
,它负责创建上下文并使其成为当前的。如果您确实需要从代码中的其他位置进行OpenGL调用,则需要自己创建一个OpenGL上下文。这是使用EGL10
或EGL14
类完成的。您可以在我的答案中找到完整的代码:GLES10.glGetIntegerv returns 0 in Lollipop only。
为什么它从按钮单击处理程序起作用不太清楚。似乎至少某些版本的Android有一个" stray"在某些情况下恰好是当前的OpenGL上下文。不过,我不会指望这一点始终如一。例如,正如你在上面提到的问题中所看到的,当一些人停止在棒棒糖上工作时,有些人因为依赖它而被烧毁。