我正试图找到一种方法来检查当前的EGLContext是否存在并且可以在Android上使用。根据规范,我尝试使用
((EGL10)EGLContext.getEGL())。eglGetCurrentContext()
然后将它与EGL10.EGL_NO_CONTEXT(尝试.equals()和!=)进行比较。然而,即使通过调试它似乎'它'正在返回'EGL_NO_CONTEXT'的实例(似乎意味着所有内部值都未初始化)但是无论我做什么比较我都无法使它工作。
任何人都知道另一种/适当的方法来完成这项工作?我不想通过抛出一个随机的GL调用并捕获EGLError来实现它......
答案 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))
我不知道这是否有任何帮助。