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

Aktuelle Zeit: Fr Jul 18, 2025 07:28

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



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Interleaved Vertex Arrays
BeitragVerfasst: Mo Mai 17, 2010 11:31 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

ich bin grad in den finalen zügen für mein iPhone spiel, im prinzip ist es zwar fertig.. aber auf dem alten iPhone 3G ruckelt es ein wenig, und das obwohl eigentlich nicht wirklich was aufwändiges passiert..

Hab mal die ganzen Apple TechNotes durchgeschaut nach optimierungs geschichten für's iPhone und bin auf einen Satz gestoßen wo es heißt: "submit strip-ordered indexed triangles with per vertex data interleaved".

Als beispiel dazu gab es folgendes:

Code:
typedef struct _vertexStruct
{
    GLfloat position[2];
    GLubyte color[4];
} vertexStruct;
 
void DrawGeometry()
{
    const vertexStruct vertices[] = {...};
    const GLubyte indices[] = {...};
 
    glEnableClientState(GL_VERTEX_ARRAY);
    glVertexPointer(2, GL_FLOAT, sizeof(vertexStruct), &vertices[0].position);
    glEnableClientState(GL_COLOR_ARRAY);
    glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(vertexStruct), &vertices[0].color);
 
    glDrawElements(GL_TRIANGLE_STRIP, sizeof(indices)/sizeof(GLubyte), GL_UNSIGNED_BYTE, indices);
}


Soweit ist mir klar was die da wollen, aber ich frage mich inwiefern das etwas bringt, und wie es überhaupt funktioniert..
Ich kannte die sache mit den Interleaved Arrays bisher immer so, das man dann beim glDrawElements o.Ä. auch angeben muß wie die daten interleaved sind.. also GL_3V_2T.. etc.

Hier werden einfach normale Pointer auf die Arrays mit einem Stride angegeben, aber woher weiß z.B. der glColorPointer das die Daten die er benötigt im selben Array wie die vom glVertexPointer liegen??

Aya


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Interleaved Vertex Arrays
BeitragVerfasst: Mo Mai 17, 2010 12:48 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Ich kannte die sache mit den Interleaved Arrays bisher immer so, das man dann beim glDrawElements o.Ä. auch angeben muß wie die daten interleaved sind.. also GL_3V_2T.. etc.

glVertexPointer usw. sind einfach nur eine allgemeinere Methode die Daten anzugeben. So bist du nicht auf die verfügbaren Formate beschränkt. glVertexAttribPointer ist noch eine Nummer allgemeiner. Dort kannst du direkt angeben welche Daten wie im Shader ankommen sollen.

Zitat:
aber woher weiß z.B. der glColorPointer das die Daten die er benötigt im selben Array wie die vom glVertexPointer liegen??

Das spielt keine Rolle, OpenGL ist es egal ob die Daten am Stück sind oder nicht. Die gewünschten Caching-Effekte bei einem Interleaved Array stellen sich automatisch ein. glInterleavedArrays macht meines Wissens auch nichts anderes als die entsprechenden glIrgnedwasPointer aufzurufen.

Zur Optimierung würde ich übrigens vorschlagen ein VertexBufferObject zu benutzen statt aus einem Array zu rendern, insbesondere wenn die Daten konstant sind wie es bei dir den Anschein hat.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Interleaved Vertex Arrays
BeitragVerfasst: Mo Mai 17, 2010 13:05 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

danke für die antwort.
Also merkt OpenGL das die daten im selben speicher bereich liegen und kann es daher optimieren, ja?

glVertexAttribPointer geht in dem falle nicht - OpenGL ES 1.0.. :)
Und VBOs nutze ich schon, wollte es in dem beispiel code oben nur nicht extra angeben, der übersicht halber.

Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Interleaved Vertex Arrays
BeitragVerfasst: Mo Mai 17, 2010 13:18 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Also merkt OpenGL das die daten im selben speicher bereich liegen und kann es daher optimieren, ja?

Jein, also OpenGL merkt das nicht, aber die CPU/GPU. Wenn du eine Speicherstelle anfragst die sich nicht im Cache befindet wird immer gleich die ganze Page (meist 4 kb) in den Cache kopiert. Also die CPU/GPU merkt das, wenn sie die entsprechenden Speicherstellen anfragt, weil die gesuchten Daten auf wundersame Weise schon im Cache zu finden sind.

Zitat:
Und VBOs nutze ich schon, wollte es in dem beispiel code oben nur nicht extra angeben, der übersicht halber.

Der Vollständigkeit halber: Wenn ein VBO gebunden ist kannst du bei glVertexPointer & Co anstelle der Pointer den entsprechenden Offset in Bytes angeben.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Interleaved Vertex Arrays
BeitragVerfasst: Mi Mai 19, 2010 00:31 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,

wenn das VBO gebunden is geht es doch sowieso nicht mit den Pointern, bzw der Pointer wird dann als Offset interpretiert. Das fehlt leider im Wiki...
€: habs grad noch mit hinter die Parameterbeschreibung von _pointer gehängt

MfG Bergmann.

_________________
Aktuelle Projekte: BumpMapGenerator, Massive Universe Online
Auf meiner Homepage gibt auch noch paar Projekte und Infos von mir.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Interleaved Vertex Arrays
BeitragVerfasst: Mi Mai 19, 2010 07:14 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Nein, das ist drin, unter "Hintergrundwissen/Optimierungen: VBO ohne glInterleavedArrays",
Direktlink: http://wiki.delphigl.com/index.php/VBO_ohne_glInterleavedArrays
MIT Pascal-Sourcecode und ein paar Erklärungen. Ich hab es selber hineingeschrieben.

Meiner Meinung nach ist es DIE Methode, Daten in die Grafikkarte zu schicken, sehr flexibel und mächtig. Möglicherweise steht es am falschen Ort, wenn ihr es nicht gefunden habt. Ich wusste aber nicht, wo ich es sonst hineinhängen sollte.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Interleaved Vertex Arrays
BeitragVerfasst: Mi Mai 19, 2010 10:50 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Ich habe an die Artikel der gängisten gl*Pointer-Funktionen sowie an den der glInterleavedArrays Funktion einen Hinweis auf "VBO ohne glInterleavedArrays" gehangen.

greetings

_________________
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  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 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:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 15 Queries | GZIP : On ]