Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   PBO asynchron glreadPixel (https://www.delphipraxis.net/178627-pbo-asynchron-glreadpixel.html)

EWeiss 18. Jan 2014 12:19


PBO asynchron glreadPixel
 
Ich erstelle beim initialisieren von OpenGL zwei PBO (Pixel Buffer Objects)um später beim Rendern glReadpixel asynchron verwenden zu können.
Eine PBO zum lesen der Pixel aus dem Framebuffer von der GPU die andere zur Bearbeitung der Pixel über die CPU.

Wenn ich das nicht mache geht meine Framerate runter bis auf 9 Frames in der Sekunde.

// InitPBO
Delphi-Quellcode:
  glGenBuffersARB(2, @m_pPBO);
  glBindBufferARB(GL_PIXEL_PACK_BUFFER_EXT, m_pPBO[0]);
  glBufferDataARB(GL_PIXEL_PACK_BUFFER_EXT,
                  StretchWidth * StretchHeight * 4,
                  nil,
                  GL_STREAM_READ);

  glBindBufferARB(GL_PIXEL_PACK_BUFFER_EXT, m_pPBO[1]);
  glBufferDataARB(GL_PIXEL_PACK_BUFFER_EXT,
                  StretchWidth * StretchHeight * 4,
                  nil,
                  GL_STREAM_READ);

  glBindBufferARB(GL_PIXEL_PACK_BUFFER_EXT, 0);
Damit habe ich zwei PBO's initialisiert.

und verwende eine davon auf diese weise.

Delphi-Quellcode:
    glBindBufferARB(GL_PIXEL_PACK_BUFFER_EXT, m_pPBO[0]);
    glReadBuffer(GL_COLOR_ATTACHMENT0_EXT);
    glReadPixels(0, 0, width, Height, GL_BGRA, GL_UNSIGNED_BYTE, nil);
    RGBBits[0] := glMapBufferARB(GL_PIXEL_PACK_BUFFER_ARB, GL_READ_ONLY_ARB);
    //.......
    // Pixel verarbeiten..
    //.......
    // Buffer freigeben.
    glUnmapBufferARB(GL_PIXEL_PACK_BUFFER_ARB);
    glBindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, 0);
Das bringt mir schon mal 20 Frames mehr.
Allerdings verwende ich nur ein PBO.

Ich verstehe im Moment die Technik nicht die dahinter steckt zwei PBO's auf ein und die
gleiche Texture anzuwenden so das die Daten asynchron gelesen (verarbeitet) werden.

Kann jemand helfen?


gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:46 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz