Hallo zusammen,
ich versuche mich gerade in der Optimierung des OpenGL-OSD. Auf meinem Tanix TX6 mit softhddevice-drm läuft das estuary skin zwar, aufgrund der Animationen und der Menuaktualisierungen aber etwas träge. Ich habe z.B. gemerkt, dass die Aktualisierung des Hauptmenüs wegen Uhrzeit etc. ca. 350ms pro Flush benötigt.
Da habe ich mir die Frage gestellt, ob denn das ganze OSD gemacht wird, oder ob nur die neuen Bereich neu gezeichnet werden wie es z.B. LCars macht.
Tatsächlich scheint es, als würden alle vorhandenen pixmaps, egal ob dirty oder nicht, gerendert werden. Ich habe das probehalber getestet, indem ich vorher eine Abfrage auf IsDirty eingebaut habe. Es geht dann bedeutend schneller (~30ms), aber die Bereiche werden dann natürlich nicht gelöscht und es wird einfach drübergezeichnet.
Wenn ich den betroffenen Bereich vorher löschen lasse, wird zwar nichts mehr übereinander gezeichnet, allerdings verschwindet auch der Hintergrund und es fehlen Teilbereiche des OSD.
Jetzt meine Fragen: Wie wäre der planmäßige OSD-Aufbau? Soll das OSD immer komplett mit allen pixmaps neu geflusht werden oder sollen nur die dreckigen Bereiche gezeichnet werden?
Ist es für Skindesigner erforderlich, jedesmal alles zu zeichnen, d.h. auch den Hintergrund oder gibt es hier andere Möglichkeiten, damit wirklich nur die dreckigen Bereiche (mit allen Layern) gezeichnet werden?
Ich stecke in Skindesigner (noch) nicht drin, möchte das aber gerne verbessern. Stellt sich nur die Frage, ob in Skindesigner oder im Ausgabeplugin.
Grundsätzlich müsste ich aber zuerst wissen, wie die osd-Klasse das generell vorsieht...
Ich hoffe, mein Anliegen ist soweit verständlich
Wenn man so eine Art dirty-Area handling einbauen könnte, wäre das ein enormer Performanceschub...
Gruß
Andreas