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".
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??
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.
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.
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.
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
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.
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 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 5 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.