Geringe Leistung beim Ausführen von eglSwapBuffer und eglMakeCurrent

8

Ich entwickle ein Android Unity Plugin, mit dem der Benutzer sein Gameplay aufnehmen kann Überblick über meine Lösung:

  • Verwenden von OpenGl FrameBufferObject (FBO), damit Unity diesen FBO
  • im Offscreen rendert
  • Holen Sie sich die Offscreen-Textur dieses FBO, die Sie dann für zwei Zwecke verwenden:
    • Auf Videooberfläche rendern
    • Auf Gerätebildschirm neu zeichnen
  • Ablauf pro Frame ausführen:
    • bind meinen FBO
    • Renderszene zu FBO (Unity-Code)
    • entbinde meinen FBO
    • Einrichten der Videooberfläche
      • Konfigurieren Sie die Oberflächengröße (nur zum ersten Mal ausführen)
      • save egl state
      • Macht die Videooberfläche aktuell
    • Zeichnen Sie mit der Offscreen-Textur meines FBO auf die Videooberfläche
    • Wiederherstellen der Standardoberfläche
      • legen Sie die Präsentationszeit für den Videoframe fest
      • Puffer von der Videooberfläche zum Standardfenster
      • Restore egl state
      • macht die Standard-Oberflächenstrom
    • Benachrichtigen Encoder-Thread, dass Daten zum Schreiben bereit sind

Mein Problem ist die Leistung, während die Aufnahme nicht gut ist. FPS-Downs von 60 bis 40 auf Samsung Galaxy S4. Ich habe versucht, die Ausführungszeit von Renderoperationen aufzuzeichnen und zu erkennen, dass die leistungsstärksten Operationen den aktuellen Betrieb der Videooberfläche und den Swap-Puffer von der Videooberfläche zur Standardfensteroperation machen. Unten ist ihr Code

%Vor%

Die Ausführungszeit für den aktuellen Vorgang ist 1 ~ 18 ms
   Ausführungszeit der Swap-Pufferoperation beträgt 4 ~ 14 ms
   Die Ausführungszeit anderer Operationen beträgt normalerweise 0 ~ 1 ms
   Wie kann man die Leistung dieser Operationen verbessern?
   Jede Hilfe wird sehr geschätzt!

    
knighthedspi 27.08.2014, 03:16
quelle

1 Antwort

0

Viele OpenGL-Aufrufe sind assync, und einige Aufrufe können dazu führen, dass OpenGL die Ausführung der eingereihten Operationen abwartet. Die Zeiten, die man sieht, sind wegen der anderen Anrufe, die vor dem eigentlichen Anruf ausgeführt werden.

    
fbafelipe 07.09.2014 20:31
quelle