Moin,
Ich habe eine Animation, welche ~60FPS benutzt. Mit dem Direct2D-Canvas bekomm ich das ganze auch sauber, flüssig und schnell hin. Ich habe aber ein kleines Problem: Die Form auf der das ganze statt findet, lässt sich nicht/nur sehr schwer bewegen. Reduziere ich die Repaint-Rate auf z.B. 10 geht's.
Ich erstelle den Canvas mit dem WIndow-
Handle constructor, also:
Canvas := TDirect2dCanvas.Create(WIndowHandle)
Das ist wichtig, da die anderen methoden (
DC und Canvas) leichte Microfreezes und niedrigere Performance haben. Wahrscheinlich, da hier mit der
GDI zusammengearbeitet wird.
Das WindowHandle war Testweise die Form selbst, und einmal von einer eigenen TCustomControl. Jedesmal dasselbe Resultat.
Wie refreshe ich?
Control.Repaint()
Control war hierbei entweder die Form oder meine EIgene komponennte. Im jeweiligen (On)Paint des Controls stand dann die Zeichenlogik. Jemand eine Ahnung, warum die Form blockiert?
Grobes Skelett der Zeichenmethode:
Delphi-Quellcode:
Canvas.BeginDraw;
[Do stuff]
Canvas.EndDraw;
Und ja ich möchte unbedingt die WindowHandle-Variante nehmen!
PS:
Getriggert wird das Refresh über einen Thread, der in regelmässigen abständen über queue eine funktion an den Hauptthread schickt, welche intern das Repaint aufruft.
Grüße
Memnarch