AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Direct2DCanvas blockiert Form bei hoher Repaint-Rate
Thema durchsuchen
Ansicht
Themen-Optionen

Direct2DCanvas blockiert Form bei hoher Repaint-Rate

Ein Thema von Memnarch · begonnen am 15. Jan 2015 · letzter Beitrag vom 15. Jan 2015
Antwort Antwort
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
Benutzerbild von Memnarch
Memnarch

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

AW: Direct2DCanvas blockiert Form bei hoher Repaint-Rate

  Alt 15. Jan 2015, 12:27
Okay wenn ich im Thread Synchronize verwende anstatt Queue gehts. Musste natürlich dann auch eine complexere Tick-Methode schreiben, welche die Zeit innerhalb des Synchronize vom zu wartenden Zeitraum abzieht bzw mit einkalkuliert. Jetzt klappt alles.

MFG
Memnarch
Da man Trunc nicht auf einen Integer anwenden kann, muss dieser zuerst in eine Float kopiert werden
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz