Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Mo Jul 14, 2025 13:48

Foren-Übersicht » Programmierung » Shader
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Shader und VBOs?
BeitragVerfasst: Mo Mär 31, 2008 14:46 
Offline
DGL Member
Benutzeravatar

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 networkmy 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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 31, 2008 15:22 
Offline
DGL Member
Benutzeravatar

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.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 31, 2008 15:22 
Offline
DGL Member
Benutzeravatar

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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 31, 2008 16:48 
Offline
DGL Member
Benutzeravatar

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 :wink:

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 networkmy 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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 31, 2008 17:15 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Ja einfach auf Pointer casten, denn in C/C++ ist Pointer und Int ziemlich kompatibel deswegen macht das da kaum einen Unterschied.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Foren-Übersicht » Programmierung » Shader


Wer ist online?

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.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 16 Queries | GZIP : On ]