Einzelnen Beitrag anzeigen

valjah

Registriert seit: 13. Nov 2006
19 Beiträge
 
Delphi 7 Personal
 
#1

DXDraw Präsentationszeit exakt steuern

  Alt 23. Mai 2007, 13:14
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
  Mit Zitat antworten Zitat