Hallo zusammen,
ich habe da mal eine Frage an die Allgemeinheit, weil es mich schon seit längerem interessiert:
Ich habe eine Engine geschrieben, die unter anderem einen ganzen Satz Engine-Widgets liefert.
Um den Prozessor etwas zu schonen werden die Widgets natürlich nur dann neu gezeichnet, wenn sich auch was ändert, ansonsten wird der bestehende Backbuffer gerendert. Beim Neuzeichnen (welches bei den Widgets über ein Repaint-Ereignis ausgelößt wird) wird alles, was der Benutzer auf die Bühne hinzugefügt hat neu gezeichnet. Genau das führt mich jetzt zu meiner Frage:
Wie ist der standardmäßige Vorgang, wenn man nur die Bereiche neu zeichnen will, die sich auch geändert haben, und nicht das komplette Bild? Das Problem ist hier halt, dass mehrere (so etwa bis 1000 Objekte) auf einmal neu gezeichnet werden. Von diesen Objekten haben sich aber vieleicht 100 Stück geändert...
Ich habe jetzt schonmal einen Repaint-Buffer gemacht, wo alles reinkommt was neu gerendert werden muss. Das Problem ist halt nur, dass der Benutzer zum einen einen Hintergrund definieren kann und zum anderen können die Objekte übereinander liegen. Wenn jetzt ein Objekt das Repaint-Ereignis auslöst, dass unter einem anderen Objekt liegt, dann müssen die Objekte, die über diesem Objekt liegen ebenfalls neu gerendert werden.
Wie kann man dieses Problem am performantesten lösen, ohne das man für jedes zu renderende Objekt alle anderen Objekte darauf überprüft, ob sie das aktuelle Objekt überlagern?
Ich hoffe ich habe mich verständlich ausgedrückt...
Danke für die (hoffentlich) zahlreichen Antworten
Steev
ich habe da mal eine Frage an die Allgemeinheit, weil es mich schon seit längerem interessiert:
Ich habe eine Engine geschrieben, die unter anderem einen ganzen Satz Engine-Widgets liefert.
Um den Prozessor etwas zu schonen werden die Widgets natürlich nur dann neu gezeichnet, wenn sich auch was ändert, ansonsten wird der bestehende Backbuffer gerendert. Beim Neuzeichnen (welches bei den Widgets über ein Repaint-Ereignis ausgelößt wird) wird alles, was der Benutzer auf die Bühne hinzugefügt hat neu gezeichnet. Genau das führt mich jetzt zu meiner Frage:
Wie ist der standardmäßige Vorgang, wenn man nur die Bereiche neu zeichnen will, die sich auch geändert haben, und nicht das komplette Bild? Das Problem ist hier halt, dass mehrere (so etwa bis 1000 Objekte) auf einmal neu gezeichnet werden. Von diesen Objekten haben sich aber vieleicht 100 Stück geändert...
Ich habe jetzt schonmal einen Repaint-Buffer gemacht, wo alles reinkommt was neu gerendert werden muss. Das Problem ist halt nur, dass der Benutzer zum einen einen Hintergrund definieren kann und zum anderen können die Objekte übereinander liegen. Wenn jetzt ein Objekt das Repaint-Ereignis auslöst, dass unter einem anderen Objekt liegt, dann müssen die Objekte, die über diesem Objekt liegen ebenfalls neu gerendert werden.
Wie kann man dieses Problem am performantesten lösen, ohne das man für jedes zu renderende Objekt alle anderen Objekte darauf überprüft, ob sie das aktuelle Objekt überlagern?
Ich hoffe ich habe mich verständlich ausgedrückt...
Danke für die (hoffentlich) zahlreichen Antworten
Steev
Zuletzt bearbeitet: