Android: Ist es möglich, eine SurfaceTexture ohne SurfaceView zu erstellen?

Ich möchte einen erstellenOberflächentextur mit einer OpenGL-Textur, die ich verwalten kann, in einem ähnlichen Setup wiediese Antwort. (Hier zitiert :)

Erstelle eine Textur mit OpenGLÜbergeben Sie diese Textur an den Konstruktor der neuen SurfaceTexture.Geben Sie der Kamera diese neue SurfaceTexture.Stellen Sie sicher, dass Sie OES_External verwenden (Einzelheiten finden Sie in der Dokumentation).

Das Erstellen einer OpenGL-Textur (wie in Schritt 1 der Antwort) erfordert jedoch einEGL-KontextDies erfordert, dass eine EGLSurface aktuell gemacht wird, was eine SurfaceTexture erfordert. Es scheint, dass die einzige Möglichkeit zum Erstellen des EGL-Kontexts darin besteht, ein SurfaceView (oder eine andere Ansicht mit einer SurfaceTexture) zu erstellen und das EGLSurface damit zu initialisieren und dann den EGLContext zu aktualisieren.

Mein Ziel ist es, einen EGLContext zu erstellen und ihn in einem Hintergrund-Thread aktuell zu machen, um eine Offscreen-Berechnung für das Kameravorschaubild durchzuführen (meistens unter Verwendung des NDK). Ich möchte eine Bibliothek erstellen und sie so unabhängig wie möglich von der Benutzeroberfläche gestalten. Zwei verwandte Fragen:

Ist es auf Java-Seite möglich, einen EGLContext zu erstellen, ohne zuvor eine SurfaceTexture erstellen zu lassen?

Auf der NDK-Seite gab es früher einen privaten API-Aufruf, um native Fenster zu erstellenandroid_createDisplaySurface()Aber es funktioniert nicht mehr und es ist eine private API. Gibt es eine Möglichkeit, mit dem NDK eine Oberfläche zu erstellen?

Ich bin ziemlich neu in der Verwendung von EGL und verstehe nicht, warum Sie ein EGLSurface benötigen, damit ein EGLContext aktuell wird. In iOS können zuerst EAGLContexts und dann Framebuffer nach Bedarf erstellt werden. Bei Verwendung von EGL benötigen Sie anscheinend immer ein natives Fenster.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage