Asynchrone glReadPixels mit PBO

8

Ich möchte zwei PBOs verwenden, um Pixel auf andere Weise zu lesen. Ich dachte, der PBO-Weg wird viel schneller, weil glReadPixels sofort zurückkehrt, wenn PBO verwendet wird, und viel Zeit kann sich überlappen.

Seltsamerweise scheint es keinen großen Nutzen zu geben. Betrachten Sie einen Code wie:

%Vor%

Das Ergebnis ist

%Vor%

Der PBO-Weg ist ein wenig schneller, aber keine befriedigende sofortige Rückkehr .

Meine Frage ist:

  • Was beeinflusst die Leistung von glReadPixels? Manchmal erreichen die Kosten 10ms, aber 1,3ms.
  • Warum sofortige Rückgabe kostet so viel wie 1,2ms? Ist es zu groß oder einfach normal?

================================================== ============================

Nach dem Vergleich mit einer Demo habe ich zwei Faktoren gefunden:

  • GL_BGRA ist besser als GL_RGBA, 1,3 ms = & gt; 1,0 ms (kein PBO), 1,2 ms = & gt; 0,9 ms (mit pbo)
  • glutInitDisplayMode (GLUT_RGB | GLUT_ALPHA) statt GLUT_RGBA, 0.9ms = & gt; 0.01ms. Das ist die Leistung, die ich möchte. In meinem System ist GLUT_RGBA = GLUT_RGB = 0. GLUT_ALPHA = 8

Dann zwei weitere Fragen:

  • Warum GL_BGRA ist besser als GL_RGBA? Ist dies der Fall für eine bestimmte Plattform oder für alle Plattformen?
  • Warum ist GLUT_ALPHA so wichtig, dass es die PBO-Leistung enorm beeinflusst?
Martin Wang 10.07.2012, 08:47
quelle

2 Antworten

5

Ich kenne glutInitDisplayMode nicht auswendig, aber das liegt normalerweise daran, dass Ihr internes und externes Format nicht übereinstimmt. Beispielsweise werden Sie das asynchrone Verhalten nicht bemerken, wenn die Anzahl der Komponenten nicht übereinstimmt, da diese Konvertierung immer noch glReadPixels blockiert.

Das wahrscheinlichste Problem ist, dass Sie mit glutInitDisplay(GLUT_RGBA) tatsächlich einen Standard Framebuffer mit einem internen Format erstellen, das tatsächlich RGB oder sogar BGR ist. Übergeben Sie den Parameter GLUT_ALPHA , wird es wahrscheinlich RGBA oder BGRA intern machen, was der Anzahl der gewünschten Komponenten entspricht.

edit: Ich habe ein NVIDIA-Dokument gefunden, in dem einige Probleme beim Pixelpacken erklärt wurden und Leistungseinfluss.

edit2: Der Leistungszuwachs von BGRA ist wahrscheinlich, weil der interne hw Puffer in BGRA ist, da ist nicht wirklich viel mehr drin.

    
KillianDS 10.07.2012, 13:18
quelle
2

BGRA ist das schnellste Format, da dies das native Format moderner Grafikprozessoren ist. RGBA, RGB und BGR müssen während des Readbacks neu formatiert werden.

    
eile 10.07.2012 13:17
quelle

Tags und Links