2016-04-15 3 views
1

Ich füge SurfaceView zu einem FrameLayout, um Video anzuzeigen, dann fügen Sie die gleiche SurfaceView zu einem anderen FrameLayout, um das gleiche Video fortzusetzen, aber zeigen nichts mit dem Fehler wie folgt: enter image description hereAddView (SurfaceView) zweimal das zweite Mal nicht angezeigt

here is bad,it`s used to update video picture to the SurfaceTexture used OpenGLES

+0

Es wäre viel einfacher, wenn Sie die Fehlermeldungen in der Frage als Text ausgedrückt, eher als als ein Bild. Der Stack-Trace zeigt einen 'updateTexImage()' Fehler aus dem Code, der von com.af56.qfvr.sdk.vrlib, org.rajawali3d.renderer und com.google.vrtoolkit.cardboard aufgerufen wird, anscheinend von der GLSurfaceView 'onDrawFrame() gestartet. 'Methode. Es sieht aus wie der EGLContext, den das SurfaceTexture erwartet, ist nicht aktuell. Sind Sie sicher, dass das SurfaceTexture vom GLSurfaceView-Renderer-Thread aktualisiert werden sollte? – fadden

Antwort

0

Sie nicht mehrere Oberflächenansichten verwenden sollten, wie auch here erwähnt.

Im Allgemeinen müssten Sie für beide Ansichten einen einzigen OpenGL-Kontext erstellen, der eine mögliche Lösung darstellt.

Wenn Sie mehrere Kontexte nicht vermeiden können, haben Sie ein Problem mit einem einzelnen Thread. Es kann nur ein Kontext pro Thread als aktuell festgelegt werden. Für jede Operation, die Sie ausführen, müssen Sie den richtigen Kontext als aktuell festlegen. Also muss zu Beginn jedes Zeichenaufrufs der Kontext festgelegt werden. Es scheint einfach zu sein, aber wenn die Ansicht in einer Methode, die Sie nicht kontrollieren können, bereits etwas mit dem openGL macht, wird das nicht funktionieren. Aber auf der hellen Seite würde ich erwarten, dass dies bereits für Sie erledigt ist, so dass Sie das letzte Problem haben: Die Kontexte dürfen keine Ressourcen, Puffer wie eine Textur teilen, außer die Kontexte sind "geteilt". Um einen gemeinsamen Kontext zu erstellen, müssen Sie den Hauptkontext als Argument im Context Construction übergeben, was wiederum dazu führt, dass Sie den Kontext selbst steuern können müssen.

So versuchen Sie Folgendes:

  • Überprüfen Sie, ob Sie einen einzelnen Kontext für beide der Ansichten verwenden können
  • Überprüfen Sie, ob Sie 2 Texturen erstellen können (1 für jeden Kontext) und sie tauschen, wenn der Austausch Ansicht
  • eine einzelne Oberflächenansicht erstellen Zeichnung und verwendet „Ansichtsfenster“ Methode zu kontrollieren, was Teil der Ansicht Sie zeichnen auf
Verwandte Themen