Re: [Projekt] ZFXCE2
Verfasst: 28.09.2012, 10:55
Hallo zusammen,
nach einiger Zeit mal ein kurzes Lebenszeichen von der ZFXCE2. Ich probiere immer noch fleißig mit Multithreaded-Rendering herum. Mittlerweise läuft das auch ganz ordentlich. Der folgende Ansatz hat sich bisher in meinem Kopf und im Code durchgesetzt:
Offene Punkte gibt es noch einige:
Den aktuellen Stand kann man sich wie immer bei Sourceforge ansehen. Ich überlege, mal ein erstes Source-Only Package freizugeben. Vielleicht kriegt man ja etwas Feedback.
Kimmi
nach einiger Zeit mal ein kurzes Lebenszeichen von der ZFXCE2. Ich probiere immer noch fleißig mit Multithreaded-Rendering herum. Mittlerweise läuft das auch ganz ordentlich. Der folgende Ansatz hat sich bisher in meinem Kopf und im Code durchgesetzt:
- Es gibt einen separaten Render-Thread, der alles API-spezifische macht.
- Dieser Renderthread bekommt eine einfache Liste mit Zeichenkommandos, sogenannten RenderCommands, die in einem RenderCache abgelegt werden.
- Diese Liste wird bei Änderungen aktualisiert, und zwar vom RenderFrontend.
- Ich habe für die RenderCommands ein Double-Buffering vorgesehen, welches Aktualisierungen immer in dem RenderCache vornimmt, der gerade nicht gezeichnet wird.
- Zur Zeit benutze ich als Synchronisationspunkt genau ein OnRenderFrame-Signal, hier werden die Caches umgeschaltet.
- Das Frontend besteht aus einem Scene-Graphen, der die Modelle, Animationen und anderen Dinge, die dargestellt werden, verwaltet.
- Hier werden auch Aktualierungen in den Transformationen vorgenommen.
- Beim Update der Nodes wird das Changeset für die Rendercommands zusammen gestellt und diese in den RenerCache eingearbeitet.
Offene Punkte gibt es noch einige:
- Animationen: Noch nicht da
- Beleuchtung: Noch nicht da
- Schatten: noch nicht da
- Beliebiges sinnvolles Feature einfügen.
- Dynamische Bufferzugriffe: sind gerade noch sehr teuer, da zwar Double-Buffering für die Commands benutzt wird, allerdings die Resourcen nur einmal da sind.
- Das größte Problem mit Kind ist die Zeit, ich kann an keinen Problem wirklich mehr als 1 Stunde drann bleiben ( das meist nach 23:00 Uhr ).
- Assimp 3.0 Release bremst andere Entwicklungen :) ( Jammern auf hohem Niveau, ich weiß )
- Separater Render-Thread bringt Vorteilel, wenn man CPU-intensive Dinge im Mainthread macht und das Rendern nicht.
- Tasks / Threading ist ein sehr spannendes Thema. Dinge wie ThreadSafe-EventQueues oder Double-Buffering für Commands bringen viel Verständnis für die auftretenden Probleme.
- Das Minimieren von Locks durch Mutexes ist esistenziell für die Performance.
- Haltet so viele Daten wie möglich Thread-lokal.
- Alles dauert viel viel länger, als man denkt.
- Ich bin zu faul, eine vernünftige Demo auf die Beine zu stellen :).
Den aktuellen Stand kann man sich wie immer bei Sourceforge ansehen. Ich überlege, mal ein erstes Source-Only Package freizugeben. Vielleicht kriegt man ja etwas Feedback.
Kimmi