Seite 1 von 1

Best practice: Texture atlas & VBO

Verfasst: 21.11.2014, 11:35
von shadow
Hallo ZFX,

ich bin immer noch über Performance-Optimierungen meiner 2D-Engine in OpenGL ES 2 . Und dazu hab ich eine "Best practice" Frage. Ich hab schon viel recherchiert, aber noch keine eindeutige Antwort gefunden... leider.

Was ich noch nicht verstanden habe ist, wie ich die verschiedenen "Sub"-Images aus einem Texture atlas mit verschiedenen matrices auf den Screen bekomme. Weil ja jede Grafik eine eigene Position/Rotation/Scale hat.

Mein bisheriger Denkansatz sieht so aus, dass ich für jeden Frame ein (dynamisches?) VBO erzeuge und der shader damit rendert. Das bedeutet aber doch, dass ich alle matrix calculations vor dem Schreiben ins VBO auf der CPU machen muss, oder? Oder könnte ich dem shader für jeden vertice (bzw jedes quad) eigene matrices mitgeben? Wenn das ginge, wäre das überhaupt sinnvoll?

Oder gibts für diese Anforderung einen ganz anderen Ansatz, den ich bisher nicht sehe? Es sollte wie gesagt in OpenGL ES 2, und vielleicht OpenGL 3 (PC) funktionieren...

Vielen Dank schonmal!
Stefan

Re: Best practice: Texture atlas & VBO

Verfasst: 21.11.2014, 11:47
von Schrompf
Pack es alles in einen Shader? Oder ich verstehe Dein Problem nicht.

Ich mach das per Instancing. Ausgangsmesh ist nur ein einzelnes Quad mit vier Vertizes (0,0), (1, 0), (0, 1) und (1, 1) und sechs Indizes (0, 1, 2) und (1, 2, 3). Theoretisch kannst Du Dir auch das sparen, indem Du gl_VertexID nutzt.

Pro Instanz packe ich dann einen Vertex in einen dynamischen VBO, in dem Position auf dem Bildschirm, Größe, Drehung, Farbe usw. stehen. Mit sin() und cos() im VertexShader kann man dann die vier Vertizes ganz einfach rotieren, platzieren usw.

Re: Best practice: Texture atlas & VBO

Verfasst: 21.11.2014, 12:00
von shadow
...ich muss noch dazu sagen, dass ich OpenGL/Grafikprogrammierung nicht als meine Kernkompetenz bezeichnen würde, bei vielen Themen (zB. Shader oder Instancing) steh ich noch am Anfang, bzw. habs noch nie gemacht. Bis vor Kurzem hab ich noch mit glBegin/glEnd gearbeitet, nur so viel dazu :D

Es ist so, ich habe einen Scenegraph, wo Skalierungen/Drehungen usw... an die Kind-Knoten "vererbt" werden. Deswegen rechne ich für jedes Image eine Render-Matrix aus, und damit kann ich dann die Positionen der Vertices eines Quads berechnen, die Frage ist jetzt nur: Mache ich das auf der CPU, also vor dem Reinstecken in das VBO, oder die ganzen Einzel-Matrices für jeden Quad irgendwie an den Shader übergeben?

Re: Best practice: Texture atlas & VBO

Verfasst: 21.11.2014, 13:38
von Schrompf
Mach es erstmal auf der CPU.

Re: Best practice: Texture atlas & VBO

Verfasst: 21.11.2014, 13:59
von shadow
Hört sich so an, als gäbs was cooleres :)

Bin gerne lernbereit, wichtig für mich ist nur dass ich verstehe, was ich tue...