OpenGL VAs & VBOs gleichzeitig? Braucht man VAs überhaupt noch??



  • Hallo,

    kann ich in ein Fenster mit Vertex Arrays UND Vertex Buffer Objects zeichnen? Also kann man diese gleichzeitig benutzen? Im Moment kann ich entweder nur das eine oder nur das andere.

    Sobald ich ein Bufferobjekt binde und die Daten puffere, kann ich mit Vertex Arrays nicht mehr zeichnen! Muss ich sowas wie "glUnbindBuffer()" machen, oder so?

    Brauche ich überhaupt noch VAs? Was ist, wenn ich mehr Daten habe, als in meinen Graka-Speicher passt? Dann muss ich doch mehrere VAs hintereinander schicken nich? Dann bringt es mir doch nichts, Daten dauerhaft auf dem Graka-Speicher abzulegen.

    Ich möchte eine kleine 3D-Anwendung programmieren. Sie ist so aufgebaut wie Minecraft, dh alles besteht aus Würfeln. Bis jetzt zeichne ich mit glBegin/glEnd, nur das ist arschlangsam. Möchte ja auch einigermaßen Sichtweite(=Viele Blöcke aufeinmal) haben.

    Ich dachte, dass sowas wie ein Fadenkreuz oder Spielfiguren auf der Graka gespeichert werden, weil diese Daten sich nicht ändern. Da Blöcke abgebaut oder gesetzt werden können, schicke ich diese lieber in VAs jedes mal neu? Klar kann ich VBOs in mein Programm "zurückmappen", aber macht das bei sich ändernden Anzahlen von Blöcken überhaupt Sinn?

    Ich bin verwirrt 😕
    Bitte Hilfe!

    lg,
    anjohn



  • Du brauchst VAO's und VBO's.
    VA's gehen zwar noch, aber ich würde komplett OpenGL3 nutzen:
    http://arcsynthesis.org/gltut/



  • Danke schon mal für den tollen Link. Seiten mit Tutorials usw kann man nie genug haben 😉

    So richtig schlau geworden bin ich aber immer noch nicht.
    Wann machen eurer Meinung nach VBOs Sinn? Am meisten für statische Daten oder?

    Ich kann den Graka-Speicher ja mappen. Aber wenn sich die Anzahl meiner Vertexe ändert, wäre es doch cool, dynamisch Speicher allokieren zu können.
    Mappe ich den Speicher meiner Graka, habe ich ja sozusagen ein float-Array fester Größe zum Arbeiten.

    Wie macht ihr das? Einfach nen riesigen (genügend großen) Float-Buffer auf der Karte reservierten und damit arbeiten? Auch wenn z.B. Teile des reservieren Speichers ungenutzt bleiben?

    Viele Grüße,
    anjohn



  • anjohn schrieb:

    Wann machen eurer Meinung nach VBOs Sinn? Am meisten für statische Daten oder?

    Was für Alternativen zu VBOs gibt es deiner Meinung nach? Alles außer VBOs ist doch deprecated!?

    anjohn schrieb:

    Aber wenn sich die Anzahl meiner Vertexe ändert, wäre es doch cool, dynamisch Speicher allokieren zu können.

    Kannst du ja, musst eben ein neues VBO machen. Wenn du in C++ mit new ein Array anlegst kannst du das auch nicht magisch größer werden lassen.

    anjohn schrieb:

    Wie macht ihr das? Einfach nen riesigen (genügend großen) Float-Buffer auf der Karte reservierten und damit arbeiten? Auch wenn z.B. Teile des reservieren Speichers ungenutzt bleiben?

    Um das was du vorhast effzient hinzubekommen, wird es sowieso nicht reichen einfach alles in einen Buffer zu stopfen und den ständig upzudaten. Du wirst eine oder mehrere Datenstrukturen für das Management der Szenendaten in den verschiedensten Kontexten brauchen (Rendering, Game Logik). In deiner Welt werden sich nicht ständig sämtliche Daten auf einmal ändern. Änderungen sind eigentlich sehr stark lokal begrenzt. Es wird daher vermutlich sinnvoll sein, die Szene zu unterteilen. Ein Grid bzw. ein Octree bieten sich wohl an.
    OpenGL ist eine low level API und keine Engine der du einfach einen riesen Haufen Daten hinwerfen kannst und wo dann plötzlich alles auf magischem Weg irgendwie funktioniert 😉



  • Hmmja okay klingt alles sehr einleuchtend. 🙂

    Dann werd ich mir wohl ein paar coole Strategien für meine VBOs einfallen lassen.

    Dachte Game-Engine programmieren wäre einfacher xDxDxD
    Aber genau deswegen mache ich das gerade. Einfach mal um einen auf die Studentenfresse zu kriegen.

    Vielen Dank!




Anmelden zum Antworten