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:
================================================== ============================
Nach dem Vergleich mit einer Demo habe ich zwei Faktoren gefunden:
Dann zwei weitere Fragen:
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.
Tags und Links opengl glreadpixels pbo