Moin,
Wir wir alle wissen funktioniert der VSync mit D2D wunderbar. Ich hatte schon 50x vor die 3 dafür nötigen Schritte zusammenzufassen, damit man in GDI+/GDI/usw Skripten den VSync einfach nachrüsten kann.
Wie funktioniert es ?
- Die UDF ermöglicht es auf den VSync zu warten, dabei wird das Skript auf 60 FPS beschränkt.
- Hat man gewartet, so kann man DANACH die eigentliche Zeichenoperation ausführen. Man hat dann ca. 16 Millisekunden Zeit das neue Bild ins Fenster zu schaffen, wenn man diese Zeit nicht einhalten kann (z.B. wenn man GDI+ nutzt und das Fenster zu groß ist), so tritt selbstverständlich trotzdem Tearing auf. Sinn macht diese UDF also nur, sofern der eigentliche Zeichenvorgang schneller als die 16ms läuft (BitBlt ist da so ein Kandidat der das kann) und das Skript (wenn man jedes Sleep ausbaut) wesentlich schneller als mit 60 FPS läuft.
- Es wird an keiner Stelle D2D zum Zeichnen benutzt, sondern nur zum Warten. Dadurch kann man die UDF in jedes beliebige Skript integrieren.
Edit: Als Beispiele sind 2 Skripte (eins mit GDI, eins mit GDI+) beigelegt. Das GDI+ Beispiel wird auf einigen Rechnern trotzdem Tearing zeigen, da das Zeichnen für die gewählte Fenstergröße ggf zu lange dauert.
Anregungen, Verbesserungen, Gefundene Fehler, usw sind gerne gesehen.
Edit1: Eine verbesserte Version von eukalyptus mit Errorhandling gibt es in Post 5.
lg
M