Позвоните, чтобы проверить, существует ли текущий EGLContext в Android - PullRequest
7 голосов
/ 22 июня 2010

Я пытаюсь найти способ проверить, существует ли текущий EGLContext и готов ли его использовать на Android. По спецификации я пробовал использовать

((EGL10) EGLContext.getEGL ()). EglGetCurrentContext ()

, а затем сравнивает его с EGL10.EGL_NO_CONTEXT (пробовал .equals () и! =). Тем не менее, даже несмотря на то, что при отладке «кажется», что он возвращает экземпляр «EGL_NO_CONTEXT» (кажется, что это означает, что все внутренние значения не инициализированы), однако, независимо от того, какое сравнение я выполняю, я не могу заставить его работать.

Кто-нибудь знает другой / правильный метод, чтобы сделать это? Я не хочу делать это, бросая случайный вызов GL и ловя EGLError ...

Ответы [ 3 ]

4 голосов
/ 25 января 2013

Я столкнулся с проблемой невозможности повторного использования текущего EGLContext при попытке отобразить то, что было на экране в GLSurfaceView, за пределами экрана EGLPixelBufferSurface. Из того, что я могу сказать, проблема с использованием статического метода

EGLContext.getEgl()

означает, что он создает экземпляр EGL по умолчанию - это означает, что связанный с ним EGLContext эквивалентен EGL10.EGL_NO_CONTEXT.

Кроме того, в Android EGLContext может быть связан только с одним потоком (Android-разработчик Ромэн Гай так говорит здесь ). Таким образом, чтобы правильно использовать

EGL.getCurrentContext()

вам потребуется предварительно существующий экземпляр EGL и вызвать метод getCurrentContext() в потоке, создавшем EGLContext.

ПРИМЕЧАНИЕ: Android теперь обрабатывает сохранение EGLContext, когда GLThread приостановлен / возобновлен в классе GLSurfaceView (взгляните на метод setPreserveEGLContextOnPause(boolean preserveOnPause)).

2 голосов
/ 18 июня 2012

Кажется, есть ошибка в реализации 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.
}
0 голосов
/ 22 июня 2010

Вы можете попробовать протестировать его, чтобы увидеть, является ли оно нулевым, а не равным данному контексту.Это то, что я бы сделал в стандартной программе opengl.

[EDIT] Вот пример здесь , который использует его следующим образом:

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

Я не знаю, поможет ли это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...