2010-06-22 3 views
6

Ich versuche einen Weg zu finden, um zu prüfen, ob ein aktueller EGLContext existiert und unter Android einsatzbereit ist. Durch die Spezifikation, habe ich versucht,Rufen Sie an, um zu überprüfen, ob ein aktueller EGLContext in Android vorhanden ist.

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

und dann zu EGL10.EGL_NO_CONTEXT Vergleich (versuchte .equals() und! =). Obwohl es durch das Debugging "scheint", dass es eine Instanz von 'EGL_NO_CONTEXT' zurückgibt (scheint zu bedeuten, dass alle internen Werte nicht initialisiert sind), aber egal, welchen Vergleich ich mache, ich kann es nicht zum Laufen bringen.

Wer weiß von einer anderen/richtigen Methode, um dies zu tun? Ich möchte das nicht tun, indem ich einen zufälligen GL-Aufruf erstelle und den EGLError abfange ...

Antwort

0

Sie könnten versuchen, es zu testen, um zu sehen, ob es null ist und nicht einem gegebenen Kontext entspricht. Dies würde ich in einem Standard-opengl-Programm tun.

[EDIT] Es ist ein Beispiel here die sie verwendet, wie folgt:

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

Ich weiß nicht, ob das jede Hilfe ist.

+1

Es gibt nie null traurig zurück. Ich habe es debugged und der EGLContext, den Android mir von eglGetCurrentContext() gibt, ist tatsächlich nicht aktuell, da irgendwelche Operationen, die es verwenden, mir den "Kein gegenwärtiger Kontextsatz" Fehler geben. – Moncader

+0

Gibt es dann einen Fehler in Ihrem Initialisierungsprozess?Als ich mich kurz vorher nach deinem Problem umgesehen habe, habe ich verschiedene Beispielcode gefunden, aber nichts, bei dem ein Fehler gefunden wurde. Vielleicht sollten Sie Ihre Initialisierungsroutinen in Übereinstimmung mit dem, was in den Beispielen für jetzt ist, überprüfen und die Fehlersuche später finden? Sie könnten auch auf einigen Android-zentrierten Websites nachfragen und auch hier nach Updates suchen. Plus, wenn eine Ihrer anderen Möglichkeiten auszahlt, stellen Sie sicher, die Lösung hier zu posten, um anderen zu helfen, es zu finden. – Amos

+0

Ich habe bereits eine voll funktionsfähige Anwendung. Allerdings habe ich einige Situationen, in denen ich Texturen in den Speicher laden möchte, wenn Android keinen aktuellen GL Kontext gesetzt hat (Wenn Sie Android nicht kennen, nun, so funktioniert es). Offensichtlich ist dies nicht möglich. Wenn ich feststelle, dass kein aktueller Kontext vorhanden ist, füge ich diese Bitmap an eine Warteschlange an, die dem VRAM hinzugefügt werden soll, wenn der Kontext wieder verfügbar wird. – Moncader

2

Es scheint ein Fehler in Android-Implementierung von EGL10.eglGetCurrentContext() zu sein, in dem das Ergebnis der eglGetCurrentContxt()

result.equals(EGL10.EGL_NO_CONTEXT) 

statt

result == EGL10.EGL_NO_CONTEXT 

Zum Beispiel wird im Vergleich mit :

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

Ich lief in das Problem der nicht in der Lage zu sein, u Wenn Sie versuchen, das, was auf dem Bildschirm in einer GLSurfaceView angezeigt wurde, auf einer Offscreen-EGLPixelBufferSurface darzustellen, wird der aktuelle EGLContext angezeigt. Von dem, was ich sagen kann, ist das Problem mit dem statischen Verfahren

EGLContext.getEgl()

, dass es eine Standard-EGL-Instanz erstellt - dies würde bedeuten, dass der EGLContext mit ihrem verbundenen EGL10.EGL_NO_CONTEXT entspricht.

Auch in Android kann die EGLContext nur mit einem Thread verknüpft werden (Android-Entwickler Romain Guy sagt so here). Also, um richtig zu nutzen

EGL.getCurrentContext()

Sie würden eine vorbestehende EGL-Instanz und rufen Sie die getCurrentContext() Methode im Thread haben, der die EGLContext erstellt.

HINWEIS: Android speichert jetzt den EGLContext, wenn der GLThread in der GLSurfaceView-Klasse angehalten/fortgesetzt wird (siehe die Methode setPreserveEGLContextOnPause(boolean preserveOnPause)).

Verwandte Themen