调用以检查Android中是否存在当前的EGLContext

时间:2010-06-22 09:42:41

标签: android opengl-es

我正试图找到一种方法来检查当前的EGLContext是否存在并且可以在Android上使用。根据规范,我尝试使用

((EGL10)EGLContext.getEGL())。eglGetCurrentContext()

然后将它与EGL10.EGL_NO_CONTEXT(尝试.equals()和!=)进行比较。然而,即使通过调试它似乎'它'正在返回'EGL_NO_CONTEXT'的实例(似乎意味着所有内部值都未初始化)但是无论我做什么比较我都无法使它工作。

任何人都知道另一种/适当的方法来完成这项工作?我不想通过抛出一个随机的GL调用并捕获EGLError来实现它......

3 个答案:

答案 0 :(得分:4)

当我尝试将GLSurfaceView屏幕上的内容渲染到屏幕外的EGLPixelBufferSurface时,我遇到了无法重新使用当前EGLContext的问题。据我所知,使用静态方法的问题

EGLContext.getEgl()

是它创建一个默认的EGL实例 - 这意味着与之关联的EGLContext等同于EGL10.EGL_NO_CONTEXT。

此外,在Android中,EGLContext只能与一个线程相关联(Android开发人员Romain Guy这样说here)。所以为了正确使用

EGL.getCurrentContext()

您必须拥有一个预先存在的EGL实例,并在创建EGLContext的线程中调用getCurrentContext()方法。

注意:Android现在处理在GLSurfaceView类中暂停/恢复GLThread时保存EGLContext(请查看setPreserveEGLContextOnPause(boolean preserveOnPause)方法)。

答案 1 :(得分:2)

Android的EGL10.eglGetCurrentContext()实现中似乎存在一个错误,其中eglGetCurrentContxt()的结果必须使用

进行比较
result.equals(EGL10.EGL_NO_CONTEXT)

而不是

result == EGL10.EGL_NO_CONTEXT

例如:

if (((EGL10) EGLContext.getEGL()).eglGetCurrentContext().equals(EGL10.EGL_NO_CONTEXT)) {
    // no current context.
}

答案 2 :(得分:0)

你可以尝试测试它是否为null,而不是等于给定的上下文。这就是我在标准opengl程序中要做的事情。

[编辑] 有一个例子here使用它如下:

if ((eglGetCurrentContext () != context->egl_context) ||
  (eglGetCurrentSurface ( EGL_READ ) != drawable->egl_surface))

我不知道这是否有任何帮助。