OpenGL 3.3 (core profile) -- VBOs

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
smurfer
Establishment
Beiträge: 195
Registriert: 25.02.2002, 14:55

OpenGL 3.3 (core profile) -- VBOs

Beitrag von smurfer »

Hallo zusammen,

da bei meinem Projekt die Grafik eher einen nebensächlichen Teil darstellt und ich eine gewisse Kompatiblität zu älterer Hardware halten wollte, habe ich bislang nur die Fixed-Function-Pipeline verwendet. Nun möchte ich jedoch auf OpenGL 3.3 (core profile) umsteigen und habe einige Fragen bzgl. der Verwendung von VBOs.

Vorweg die groben Rahmenbedingungen: 2D-Orthogonalprojektion, gezeichnet werden hauptsächlich Polygonzüge (nicht zwangsläufig geschlossen). Die Polygonzüge bleiben weder von ihrer Geometrie noch von ihrer Segmentanzahl gleich, sondern können sich im Schlimmstfall von Frame zu Frame ändern. Die Änderung passiert auf der CPU.

Im Folgenden die Fragen, die sich mir gestellt haben, wobei natürlich weitere Ansätze außerhalb der konkreten Fragen willkommen sind:
  • In den meisten Tutorials werden bezüglich der Geometrie statische Objekte einmalig in VBOs gespeichert und dann immer wieder in Abhängigkeit der Transformationsmatrizen direkt aus dem VBO gerendert. Wie gehe ich bei o.g. dynamischen Fällen vor?
    • In jedem Frame gepufferte Daten zu GPU schieben, indem der alte VBO überschrieben wird?
    • In jedem Frame gepufferte Daten zu GPU schieben, indem ein neuer VBO erzeugt wird?
    • Double-/Triple-/N-Buffering und in jedem Frame in den nächsten Puffer schieben?
  • Soweit ich verstanden habe, sollten für gute Performance die VBOs nicht unbedingt in der Größe verändert werden. Gibt es eine verbreitete Strategie, wie mit Größenveränderungen umgegangen wird (z.B. von Vornherein sehr groß auslegen, bei Bedarf erweitern wie beispielsweise einen std::vector oder Ähnliches)?
  • Ist die Anzahl der VBOs entscheidend für die Performance im oben genannten Kontext?
Beste Grüße, smurfer
Benutzeravatar
Schrompf
Moderator
Beiträge: 4838
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: OpenGL 3.3 (core profile) -- VBOs

Beitrag von Schrompf »

Mach Dir keine Gedanken. glBufferData() jedes Frame, oder sogar xmal jedes Frame, und das ganze MultiBuffering macht der Treiber für Dich. Wenn Du dann viele dutzend MB jedes Frame auf die Art schaufeln musst, kann es sich lohnen, nochmal genauer nachzumessen. Dann allerdings musst Du mit Unterscheidungen zwischen AMD und NVidia anfangen und Intel braucht sicher ne extralange Extrawurst.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
smurfer
Establishment
Beiträge: 195
Registriert: 25.02.2002, 14:55

Re: OpenGL 3.3 (core profile) -- VBOs

Beitrag von smurfer »

Vielen Dank für die schnelle Antwort, Schrompf. Das beruhigt mich, da ich auch nicht sonderlich viele Daten habe -- eine Baustelle weniger.
Antworten