Android 在没有当前上下文的情况下调用OpenGL ES API(每个线程记录一次)-OpenGL ES

Android 在没有当前上下文的情况下调用OpenGL ES API(每个线程记录一次)-OpenGL ES,android,multithreading,opengl-es,Android,Multithreading,Opengl Es,我真的需要有人帮助我理解我所面临的问题。我正在尝试从以下行获取GPU信息: renderer=GLES20.glGetString(GLES20.GL_renderer) vendor=GLES20.glGetString(GLES20.GL_vendor) version=GLES20.glGetString(GLES20.GL_版本) 如果我从某个活动的“OnCreate”方法执行这些行,我将收到logcat中的错误“E/libEGL(4380):在没有当前上下文(每个线程记录一次)的情况下

我真的需要有人帮助我理解我所面临的问题。我正在尝试从以下行获取GPU信息:

renderer=GLES20.glGetString(GLES20.GL_renderer)

vendor=GLES20.glGetString(GLES20.GL_vendor)

version=GLES20.glGetString(GLES20.GL_版本)

如果我从某个活动的“OnCreate”方法执行这些行,我将收到logcat中的错误“E/libEGL(4380):在没有当前上下文(每个线程记录一次)的情况下调用OpenGL ES API”,并返回空值

然而,如果我通过点击按钮来执行这些行,我就会得到结果

你能不能有人帮我确定我犯了什么错误,或者在这方面我还有什么需要学习的


即使从onCreate方法执行,如何获得结果?

问题正是错误消息告诉您的:您试图在没有当前OpenGL上下文的情况下进行OpenGL调用(
glGetString
)。OpenGL调用需要进行调用的线程中的当前上下文

OpenGL的典型用途包括使用
GLSurfaceView
,它负责创建上下文并使其成为当前上下文。如果确实需要从代码中的其他位置调用OpenGL,则需要自己创建OpenGL上下文。这是使用or类完成的。您可以在我的答案中找到完整的代码:


它从按钮点击处理程序工作的原因还不太清楚。看起来至少有一些版本的Android有一个“游离”的OpenGL上下文,在某些情况下它恰好是最新的。不过,我不指望它能始终如一地发挥作用。例如,正如您在上面的问题中所看到的,当它停止使用棒棒糖时,一些人因为依赖它而被烧死。

问题正是错误消息告诉您的:您试图在没有当前OpenGL上下文的情况下进行OpenGL调用(
glGetString
)。OpenGL调用需要进行调用的线程中的当前上下文

OpenGL的典型用途包括使用
GLSurfaceView
,它负责创建上下文并使其成为当前上下文。如果确实需要从代码中的其他位置调用OpenGL,则需要自己创建OpenGL上下文。这是使用or类完成的。您可以在我的答案中找到完整的代码:

它从按钮点击处理程序工作的原因还不太清楚。看起来至少有一些版本的Android有一个“游离”的OpenGL上下文,在某些情况下它恰好是最新的。不过,我不指望它能始终如一地发挥作用。例如,正如你在上面的问题中所看到的,当它停止使用棒棒糖时,一些人因为依赖它而被烧伤