Einzelnen Beitrag anzeigen

Benutzerbild von Memnarch
Memnarch

Registriert seit: 24. Sep 2010
737 Beiträge
 
#1

Direct2DCanvas blockiert Form bei hoher Repaint-Rate

  Alt 15. Jan 2015, 10:38
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
Da man Trunc nicht auf einen Integer anwenden kann, muss dieser zuerst in eine Float kopiert werden

Geändert von Memnarch (15. Jan 2015 um 10:43 Uhr)
  Mit Zitat antworten Zitat