AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi DXDraw Präsentationszeit exakt steuern

DXDraw Präsentationszeit exakt steuern

Ein Thema von valjah · begonnen am 23. Mai 2007 · letzter Beitrag vom 25. Mai 2007
Antwort Antwort
valjah

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

DXDraw Präsentationszeit exakt steuern

  Alt 23. Mai 2007, 14: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
valjah

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

Re: DXDraw Präsentationszeit exakt steuern

  Alt 25. Mai 2007, 01:10
Ich habe eine Lösung gefunden, die vertical blanks abzufragen. Damit sollte sich das Problem lösen lassen...
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 14:36 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