2010-06-22 98 views
6

我试图找到一种方法来检查当前EGLContext是否存在并准备在Android上使用。通过规范,我一直在使用调用以检查Android中是否存在当前EGLContext

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

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

任何人都知道另一个/正确的方法来完成这项工作?我不想通过抛出一个随机GL呼叫和捕捉EGLError来做到这一点......

回答

0

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

[编辑]有它使用它,如下所示为例here

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

我不知道这是任何帮助。

+1

它从不遗憾地返回null。我已经调试过它,并且由eglGetCurrentContext()给我的EGLContext实际上不是当前的,因为使用它的任何操作都会给我'没有当前上下文集'的错误。 – Moncader 2010-06-22 14:13:44

+0

那么在初始化过程中是否存在某种错误?当我早点查看你的问题时,我发现了各种各样的示例代码,但没有任何错误检查它。也许你应该仔细检查你的初始化例程,以符合现在的例子中的内容,并在以后找到错误检查的东西?您也可以在更多以Android为中心的网站上进行咨询,并随时查看更新。此外,如果您的其他途径之一得到回报,请务必在此处发布解决方案以帮助其他人找到它。 – Amos 2010-06-22 16:43:35

+0

我已经有一个完整的工作应用程序。然而,我有一些情况,当Android没有设置当前的GL上下文时,我想要将纹理加载到内存中(如果您不知道android,那么这就是它的工作原理)。显然,这是不可能的,因此当我检测到没有当前上下文时,我会将该位图追加到队列中,以便当上下文变得可用时再添加到VRAM中。 – Moncader 2010-06-23 01:13:38

2

似乎是Android的执行EGL10.eglGetCurrentContext(),其中eglGetCurrentContxt()的结果,必须使用

result.equals(EGL10.EGL_NO_CONTEXT) 

而不是

result == EGL10.EGL_NO_CONTEXT 

例如进行比较的一个bug :

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

我遇到了不能重新关闭的问题在尝试将GLSurfaceView中的屏幕上的内容呈现给屏幕外的EGLPixelBufferSurface时,请使用当前的EGLContext。从我可以告诉,利用静态方法

EGLContext.getEgl()

的问题是,它会创建一个默认的EGL实例 - 这将意味着,与它相关的EGLContext相当于EGL10.EGL_NO_CONTEXT。

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

EGL.getCurrentContext()

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

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

相关问题