ich habe aktuell im Hauptspeichern 4 Arrays mit den Texturkoordinaten (g_texcoords), Normalen (g_normals), Verticen (g_vertices) und Indexen (g_faces). Nun will ich die mittels einem VBO rendern, was ich mittels Interleaved Arrays machen könnte, aber auch ohne. Ersteres würde erfordern, dass ich mittels einer Schleife alle 3 bzw. 4 Arrays durchgehe und die Daten "sortiert" hochlade, damit ich GL_T2F_N3F_V3F verwenden kann. Da ich aber gerade keine Lust auf Schleifen habe , dachte ich, probierst du es mal ohne Interleaved Arrays, also dass die 3 bzw. 4 Arrays (je nach dem ob man die Indexe verwendet) in getrennten Speicherbereichen auf der GraKa liegen bzw. hintereinander (und nicht abwechselnd wie es bei Interleaved Arrays der Fall ist).
Geht das? Wenn ja wie? (Was müsste z.B. Stride für einen Wert haben, da die Texturen ja nur 2 Koordinaten haben, der Rest aber mehr?)
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Das geht nicht ohne weiteres. Du könntest zwar mit glVertexPointer und Konsorten ein entsprechendes Verhalten erreichen. Bedenke aber: Wenn dus interleavst muss die Grafikkarte nur einen Happen nach dem anderen nehmen, essen und dann verdauen. Anders muss sie sich die Zutaten aus allen Ecken zusammensuchen (um in dem Bild zu bleiben), weil sie nicht direkt nebeneinander liegen. Ich weiß aber nicht genau, was für einen Performance-Impact das letztendlich hat. Im zweifelsfalle ausprobieren.
_________________ 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
Also soweit ich weiß kann man nur ein VBO gleichzeitig binden. Alle Daten müssen also irgendwie in einem Buffer sein. Es ist aber möglich die Daten hintereinander in einem Buffer zu speichern. Dazu Stride auf 0 setzen und den Offset/Pointer jeweils auf den Anfang des jeweiligen Bereiches. Die Schleife brauchst du dann aber trotzdem.
Wann immer möglich sollte man die Daten aber interleaved speichern. Es gibt Fälle in denen es sinnvoll ist auf das interleaven zu verzichten....aber "keine Lust auf Schleifen" zählt nicht dazu Ein Grund wäre beispielsweise, wenn du Vertexfarben hast und sich die Farben regelmäßig ändern, während der Rest des Buffers unverändert bleibt. In dem Fall würde man dann mit glBufferSubData genau den Bereich mit den Farben überschreiben.
Mitglieder in diesem Forum: 0 Mitglieder und 4 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.