Niedrige Leistung beim Ausführen von eglSwapBuffer und eglMakeCurrent

Ich entwickle ein Android Unity Plugin, mit dem der Benutzer sein / ihr Gameplay aufzeichnen kann
Übersicht meiner Lösung:

Verwenden von OpenGl FrameBufferObject (FBO), damit Unity dieses FBO nicht mehr anzeigtHolen Sie sich die Offscreen-Textur dieses FBO und verwenden Sie sie für zwei Zwecke:Auf Videooberfläche rendernAuf Gerätebildschirm neu zeichnenAblauf pro Frame ausführen:Binde meinen FBOSzene in FBO rendern (Unity Code)Binde meinen FBO aufVideooberfläche einrichtenOberflächengröße konfigurieren (nur beim ersten Mal ausführen)Speichern Sie egl ZustandVideooberflächenstrom machenMit der Offscreen-Textur meines FBO auf die Videooberfläche zeichnenWiederherstellen der StandardoberflächePräsentationszeit auf Videorahmen einstellenPuffer von der Videooberfläche in das Standardfenster tauschenegl Zustand wiederherstellenStandardoberflächenstrom festlegenBenachrichtigen Sie den Encoder-Thread, dass die Daten schreibbereit sind

Mein Problem ist die Leistung während der Aufnahme ist nicht gut. FPS sinkt auf dem Samsung Galaxy S4 von 60 auf 40. Ich habe versucht, die Ausführungszeit von Rendervorgängen aufzuzeichnen und zu erkennen, dass die Performance-Vorgänge am stärksten davon abhängen, die Videooberfläche auf den aktuellen Stand zu bringen und den Puffer von der Videooberfläche auf die Standardfensteroperation zu tauschen. Unten ist ihr Code

public void makeCurrent()
{
 if (!EGL14.eglMakeCurrent(this.mEGLDisplay, this.mEGLSurface, this.mEGLSurface, this.mEGLContext))
  throw new RuntimeException("eglMakeCurrent failed");
}

public boolean swapBuffers()
{
 return EGL14.eglSwapBuffers(this.mEGLDisplay, this.mEGLSurface);
}

Die Ausführungszeit der aktuellen Operation beträgt 1 ~ 18 ms
Die Ausführungszeit der Swap-Puffer-Operation beträgt 4 bis 14 ms
Die Ausführungszeit für andere Operationen beträgt normalerweise 0 bis 1 ms
Wie kann die Leistung dieser Vorgänge verbessert werden?
Jede Hilfe wird sehr geschätzt!

Antworten auf die Frage(1)

Ihre Antwort auf die Frage