Best practice: Texture atlas & VBO

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
shadow
Establishment
Beiträge: 147
Registriert: 26.02.2009, 14:04
Alter Benutzername: floyd
Wohnort: Nürnberg
Kontaktdaten:

Best practice: Texture atlas & VBO

Beitrag 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
Benutzeravatar
Schrompf
Moderator
Beiträge: 4854
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: Best practice: Texture atlas & VBO

Beitrag 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.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
shadow
Establishment
Beiträge: 147
Registriert: 26.02.2009, 14:04
Alter Benutzername: floyd
Wohnort: Nürnberg
Kontaktdaten:

Re: Best practice: Texture atlas & VBO

Beitrag 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?
Benutzeravatar
Schrompf
Moderator
Beiträge: 4854
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: Best practice: Texture atlas & VBO

Beitrag von Schrompf »

Mach es erstmal auf der CPU.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
shadow
Establishment
Beiträge: 147
Registriert: 26.02.2009, 14:04
Alter Benutzername: floyd
Wohnort: Nürnberg
Kontaktdaten:

Re: Best practice: Texture atlas & VBO

Beitrag 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...
Antworten