Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Hi ihr,
Ich frage mich gerade, ob es irgendwie möglich ist, VBOs dazu zu "überreden", auch Vertexattribute zu beeinhalten und richtig zu übergeben. Schließlich möchte man zum Beispiel die Tangente und Bitangente des Vertices übergeben, um Bumpmapping oder sowas zu realisieren.
Es gibt Funktionen wie glVertexAttribPointer, aber die wollen ja einen Pointer auf den Hauptspeicher und damit ist doch der Vorteil der VBOs dahin, oder? Oder bleibt das erneute Transferieren in den GRAM erspart, wenn man den Gemappten Pointer auf einen VBO übergibt?
Fragen über Fragen und ich hoffe, dass ich eine Antwort bekomme
Gruß Lord Horazont
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Für sowas kann man die Texturkoordinaten nehmen, ob da jetzt "echte" Texturkoordinaten drinstehen, oder ob du eigene Parameter dort ablegst ist ja equal, da du diese selbst im Shader interpretierst.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Die gl*Pointer Funktionen stammen aus der Zeit aus der es nur VertexArrays gab. Früher war das ein Pointer auf einen Speicherbereich. Bei VBOs ist das aber ein Offset innerhalb des VBOs. Oder auch anders gesagt ist das die Position des ersten Elementes.
Wenn du bisher mit glInterleavedArrays gearbeitet hast, dann wirst du das vermutlich ändern müssen, denn glInterleaveArrays ist etwas beschränkt. Wenn du jetzt aber noch 2x3 Floats pro Vertex zusätzlich anhängen möchtest, dann gibt es für glInterleavedArrays kein Schema mehr womit er arbeiten kann. Also musst du das alles per Hand einstellen. Genau so wie, wenn man mehr als eine Texturkoordinate haben möchte. Wenn du mal nach MultiTexturing und VBO schaust solltest du auch was an Code finden.
PS: Wenn das VBO gemapped ist, dann greifst du nicht direkt auf den Grafikkartenspeicher zu. Sondern je nach Flag (READ) beim Mappen wurde der Speicher in den RAM kopiert. Deswegen sollte man, wenn man das komplette VBOs überschreiben will, auch entsprechendes WRITE_ONLY Flag setzen, da sonst erst einmal der gesammte Speicher gelesen werden muss. Und beim Verändern von kleinen bereichen in großen VBOs ist glSubData (oder wie das heißt) sicher auch besser, da dort nichts in den RAM kopiert wird. Sofern die Aufrufe überschaubar bleiben.
Und wenn ich mich nicht vertue, dann ist das VBO für diesen Zeitraum auch auf der Grafikkarte gesperrt. Da bin ich mir aber nicht wirklich sicher. Aber ich meine zu mindest. Alles andere wäre auch spannend was da als Ergebniss entstehen würde.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Lossy eX hat geschrieben:
Die gl*Pointer Funktionen stammen aus der Zeit aus der es nur VertexArrays gab. Früher war das ein Pointer auf einen Speicherbereich. Bei VBOs ist das aber ein Offset innerhalb des VBOs. Oder auch anders gesagt ist das die Position des ersten Elementes.
Ok... Die Funktionen wollen aber immernoch einen Pointer als Parameter haben. Soll ich das Offset einfach auf Pointer casten oder gibts da ne alternative?
@Sascha:
Bringt nur leider nichts, da glInterleavedArrays nur eine Texturkoordinate unterstützt
Gruß Lord Horazont
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.