Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi DXDraw Präsentationszeit exakt steuern (https://www.delphipraxis.net/92622-dxdraw-praesentationszeit-exakt-steuern.html)

valjah 23. Mai 2007 13:14


DXDraw Präsentationszeit exakt steuern
 
Hallo!

Ich möchte die Darstellung eines Bildes auf einer DXDraw-Komponente zeitlich exakt steuern. Das Bild soll genau 50ms dargestellt werden, und zwar unabhängig von der Framerate. Die Option doWaitVBlank habe ich auf True gesetzt, da ich vermeiden will, dass sich Bilder "überlappen".
Mein Code sieht bisher etwa so aus:

Delphi-Quellcode:
DXImageList.Items[i].Draw(DXDraw.Surface, x, y, 0);
DXDraw.Flip;
QueryPerformanceFrequency(res);
QueryPerformanceCounter(t1);
repeat
  QueryPerformanceCounter(t2);
  ptime := (t2 - t1) * 1000 div res;
until ptime >= 50;
DXDraw.Surface.Fill(0);
DXDraw.Flip;
Wie kann ich sicherstellen, dass zwischen dem Ende des ersten Flips (Bild) und dem Ende des zweiten Flips (schwarz) exakt 50ms liegen?
- Ich müsste die Flipzeit (die ja abhängt von der Framerate) von der Wartezeit abziehen. Wenn ich aber einfach vor und nach dem Flip-Befehl zusätzliche Zeitmessungen vornehme, bekomme ich da wegen des WaitVBlank sehr unterschiedliche Ergebnisse. Eine Alternative wäre möglicherweise die DXDraw.FrameRate, allerdings weiß ich nicht, wie die berechnet wird und sie weicht von meiner selbst berechneten stark ab und schwankt dazu noch ziemlich.
- Ich müsste sicherstellen, dass der zweite Flip-Befehl rechtzeitig ausgeführt wird, und nicht wegen des WaitVBlank evtl. 10ms später.

Das Ganze wäre vermutlich einfacher, wenn ich WaitVBlank auf False setzen würde. Dadurch könnte ich aber die Darstellung nicht mehr so genau kontrollieren und wüsste nicht sicher, wann das Bild vollständig zu sehen ist, oder?
Möglicherweise gibt es ja auch eine framebasierte Lösung, die man dann zeitlich umrechnen kann. Statt also z.B. 50ms zu warten, könnte man eine bestimmte Anzahl von Scans (Blanks) abwarten (wenn man weiß, wie lange ein Scan dauert).

Vielleicht hat ja einer von Euch bereits eine Lösung oder ein paar gute Ideen dazu.

Danke!

valjah

valjah 25. Mai 2007 00:10

Re: DXDraw Präsentationszeit exakt steuern
 
Ich habe eine Lösung gefunden, die vertical blanks abzufragen. Damit sollte sich das Problem lösen lassen...


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:57 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