2017-05-30 3 views
1

Ich schreibe eine Android OpenGL ES-Anwendung, die möglicherweise viele Ressourcen, Texturen, Shader usw. laden wird. Normalerweise wird der EGLContext beim Löschen der Ansicht verworfen, z. B. wenn sich die Bildschirmausrichtung ändert. Da es sehr viel Zeit in Anspruch nehmen kann, alle notwendigen Ressourcen in OpenGL zu laden, die Shader zu kompilieren, Mipmaps zu generieren, etc., suche ich nach einer Möglichkeit, den EGL-Kontext über Bildschirmorientierungsänderungen hinweg beizubehalten, so dass dies nicht geschieht muss jedes Mal durchgeführt werden, wenn das Gerät gedreht wird.Android: EGLContext über die Bildschirmrotation hinweg konservieren

Weitere Informationen: Ich verwende GLSurfaceView. Ich habe versucht, eine benutzerdefinierte EGLContextFactory zu implementieren, die einen EGLContext erstellt und jedes Mal den gleichen Kontext an die neue GLSurfaceView zurückgibt. Wenn sich das Gerät jedoch dreht, wird ein Fehler von EGL_BAD_CONTEXT ausgelöst, vermutlich weil die alte Ansicht nicht mehr vorhanden ist oder weil die neue Ansicht nicht mit der übereinstimmt, für die der EGLContext erstellt wurde.

Es muss eine Möglichkeit geben, den Kontext zu speichern. Leider ist die EGLContext-API sehr minimal und erlaubt Ihnen nicht, den einmal erstellten Kontext zu ändern. Gibt es zum Beispiel die Möglichkeit, die Oberfläche, auf die der Kontext verweist, über mehrere Ansichten hinweg zu teilen?

Antwort

1

Ich benutze den NDK, aber die Drehung des Geräts führt nicht dazu, dass ich meinen Kontext neu lade. Von dem, was ich von dem Code gelesen habe, eglMakeCurrent bindet die context to the new surfaces.

Ich benutze einige nVidia written code, die dies für mich verwaltet, aber es sieht aus wie eine einfache Zustandsmaschine, die den alten Kontext an die neue Oberfläche neu binden wird.

Ich weiß, das ist C/C++ - Code und nicht Java, aber die Schritte und Bestellungen sollten gleich sein.

Verwandte Themen