Archiv verlassen und diese Seite im Standarddesign anzeigen : VSync in Windows
Ich berechne in Delphi ein TBitmap vor und kopiere es anschließend in ein Image. Das ganze zeigt VSync-Artefakte (manchmal scheint der Hintergrund hervor.)
Gibt es eine Möglichkeit, vor jedem Kopieren zu warten, bis der Kathodenstrahl rechts unten angekommen ist?
Demirug
2003-01-26, 12:21:10
Denn V-Sync kannst du nicht abwarten.
Den Effekt den du allerdings hast ist nicht direkt ein V-Sync Effekt sonder entsteht aufgrund der Tatsache das Windows ja bekanntermassen immer in den Frontbuffer schreibt und normalerweise vor dem Zeichnen den Hintergrund des Fensters mit einem Brush löscht.
Um diesen Effekt zu beseitigen muss man dieses Löschen unterbinden und alles in ein Bitmapzeichen und als letztes dieses Bitmap auf einen Schlag auf den Bildschirm kopieren. Dadurch läst sich dieser Effekt (bis auf ein mögchliches Tearing) beseitigen.
Jetzt frag mich aber bitte nicht wie man das Delphi macht. Mit C++ habe ich das schon öfter gemacht.
Originally posted by Demirug
Um diesen Effekt zu beseitigen muss man dieses Löschen unterbinden und alles in ein Bitmapzeichen und als letztes dieses Bitmap auf einen Schlag auf den Bildschirm kopieren. Dadurch läst sich dieser Effekt (bis auf ein mögchliches Tearing) beseitigen.
Jetzt frag mich aber bitte nicht wie man das Delphi macht. Mit C++ habe ich das schon öfter gemacht. Ich schreibe:MainForm.Image1.Picture.Graphic:=Bitmap;Das BitMap wird vorher zeilenweise beschrieben (mit Bitmap.Scanline)
Ich müsste eine Möglichkeit haben, das Neuzeichnen eines Elements bzw. des gesamten Fensters für einige Zeit schlichtweg verbieten zu können.
janjan
2003-01-30, 14:55:40
probiers mal mit BitBlt():
http://www.delphipraxis.net/viewtopic.php?t=1978&highlight=bitblt
http://www.delphipraxis.net/viewtopic.php?t=1951&highlight=bitblt
http://www.delphipraxis.net/viewtopic.php?t=715&highlight=bitblt
Nasenbaer
2003-02-02, 15:25:06
Die Formen in Delphi haben die Option DoubleBuffered.
Frag mal die Hilfe wo du die Option genau findest.
EDIT: Form1.DoubleBuffered := True;
Es sollte dann funzen.
Mfg Nasenbaer
vBulletin®, Copyright ©2000-2025, Jelsoft Enterprises Ltd.