Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi wait for vertical blanking (https://www.delphipraxis.net/92684-wait-vertical-blanking.html)

valjah 24. Mai 2007 10:45


wait for vertical blanking
 
Gibt es eine Möglichkeit (evtl. über DirectX) festzustellen, wann der vertical blank auftritt, bzw. eine bestimmte Anzahl von blanks abzuwarten?
Die DelphiX-Komponente DXDraw besitzt ja die Option doWaitVBlank, kann also genau dieses Ereignis abfragen. Dann müsste man da doch auch anders rankommen können...

mkinzler 24. Mai 2007 10:46

Re: wait for vertical blanking
 
Schau dir doch den Code der kompo an

valjah 24. Mai 2007 10:56

Re: wait for vertical blanking
 
Folgenden Code habe ich in der DXDraws-Komponente gefunden:

Delphi-Quellcode:
if doWaitVBlank in FDXDraw.NowOptions then
  FDXDraw.FDDraw.DXResult := FDXDraw.FDDraw.IDraw.WaitForVerticalBlank(DDWAITVB_BLOCKBEGIN, 0);
Kann mir da vielleicht jemand bei der Interpretation helfen? Vor allem: wie kann ich WaitForVerticalBlank selbst einsetzen?

mkinzler 24. Mai 2007 11:00

Re: wait for vertical blanking
 
Scheint ein Cllabck auf einen COM-Event zu sein.

valjah 24. Mai 2007 11:11

Re: wait for vertical blanking
 
Hier gibt es mehr Informationen dazu...

valjah 24. Mai 2007 12:48

Re: wait for vertical blanking
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hat vielleicht jemand eine Idee, wie ich das umsetzen könnte? Ich bin leider noch ein ziemlicher Anfänger.
Die DirectX-Unit aus dem DelphiX-Paket habe ich mal angehängt. Dort wird meiner Meinung nach die WaitForVerticalBlank-Funktion definiert.

Folgendes habe ich schon probiert:
Delphi-Quellcode:
uses ... DirectX, DXDraws;

type
  TForm1 = class(TDXForm)
    DXDraw1: TDXDraw;
    ...
  public
    lpDD: IDirectDraw;

...

DXDraw1.Initialize;
DXDraw1.Surface.Fill(0);

lpDD.WaitForVerticalBlank(DDWAITVB_BLOCKBEGIN, 0);

DXDraw1.Flip;
Das kompiliert Delphi mir auch ohne Fehlermeldung, allerdings hängt sich mein Computer mit einem schwarzen Bildschirm auf. (Wenn ich den WaitForVerticalBlank-Aufruf weglasse, kann ich das Programm problemlos beenden.)
Was mache ich hier falsch?

valjah 25. Mai 2007 00:07

Re: wait for vertical blanking
 
Ich habe die Lösung gefunden:

Delphi-Quellcode:
DXDraw1.DDraw.IDraw.WaitForVerticalBlank($00000001, 0);
Allerdings akzeptiert Delphi kein DWORD als Flag. Den entsprechenden Wert ($00000001) habe ich aus der DirectX-Komponente entnommen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:04 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz