glreadpixels

___ tag123opengl ___ OpenGL (Open Graphics Library) ist ein Grafikstandard und eine API, die plattformunabhängig und für Desktops, Workstations und mobile Geräte verfügbar ist. Es wurde entwickelt, um hardwarebeschleunigtes Rendering bereitzustellen und bietet daher eine erheblich verbesserte Leistung gegenüber dem herkömmlichen Software-Rendering. OpenGL wird für Anwendungen wie CAD-Software und Computerspiele verwendet. Der OpenGL-Standard sowie OpenGL ES werden von der Khronos-Gruppe gesteuert. ___ qstnhdr ___ Asynchrone glReadPixels mit PBO ___ answer11414204 ___

Ich kenne %code% 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 %code% blockiert.

Das wahrscheinlichste Problem ist, dass Sie mit %code% tatsächlich einen Standard Framebuffer mit einem internen Format erstellen, das tatsächlich %code% oder sogar %code% ist. Übergeben Sie den Parameter %code% , wird es wahrscheinlich %code% oder %code% 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 %code% ist wahrscheinlich, weil der interne hw Puffer in %code% ist, da ist nicht wirklich viel mehr drin.

    
___ answer11414173 ___

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.

    
___ tag123pbo ___ Pixel-Pufferobjekte (PBO) sind OpenGL-Pufferobjekte, die zum asynchronen Hoch- und Herunterladen von Pixeldaten verwendet werden. ___ tag123glareadpixels ___ glReadPixels ist eine OpenGL-API-Funktion zum Lesen von Pixeldaten aus dem Quell-Framebuffer in den Zielspeicherpuffer. Wenn FBO unterstützt wird, könnte die Quelle FBO sein; Wenn PBO unterstützt wird, könnte das Ziel PBO sein. ___ qstntxt ___

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?
___
2
Antworten

Asynchrone glReadPixels mit PBO

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 kein...
10.07.2012, 08:47