| enable (optional) - True waits for the display refresh, False presents immediately; True (default) |
|
Synchronises Flip with the display refresh to avoid tearing. With VSync on - the default - each Flip waits for the vertical blank, so frames never tear and the frame rate tops out at the monitor's refresh rate. That is the right choice for almost every finished game. Turn it off to measure real performance while profiling, or when you want the lowest possible input latency and can accept visible tearing. With VSync off, consider FrameLimit so the game does not spin at thousands of frames per second on menus, heating up laptops for nothing. For the full story, see the image-quality guide. See also: FrameLimit, Flip. |
; VSync Example
; -------------
Graphics3D 640,480,0,2
SetBuffer BackBuffer()
camera=CreateCamera()
PositionEntity camera,0,2,-7
RotateEntity camera,10,0,0
light=CreateLight()
RotateEntity light,45,45,0
; A fast-spinning striped drum; tearing shows on it when VSync is off
drum=CreateCylinder()
ScaleEntity drum,1.5,2,1.5
PositionEntity drum,0,2,2
EntityColor drum,240,200,60
post=CreateCube()
ScaleEntity post,0.3,2,0.3
PositionEntity post,0,0,2
EntityColor post,120,160,220
sync=1
frames=0
fps=0
timer=MilliSecs()
While Not KeyDown(1)
; Press Space to toggle vertical synchronisation
If KeyHit(57) Then sync=1-sync
; Synchronise Flip with the display, or present immediately
VSync sync
; Count real frames per second
frames=frames+1
If MilliSecs()-timer>=1000 Then
fps=frames
frames=0
timer=MilliSecs()
EndIf
TurnEntity drum,0,7,0
; Arrow keys move the camera
If KeyDown(200) Then MoveEntity camera,0,0,0.1
If KeyDown(208) Then MoveEntity camera,0,0,-0.1
If KeyDown(203) Then TurnEntity camera,0,1,0
If KeyDown(205) Then TurnEntity camera,0,-1,0
RenderWorld
Text 0,0,"Space: toggle VSync Arrow keys: move camera Esc: exit"
If sync
Text 0,20,"VSync True (Flip waits for the display - no tearing)"
Else
Text 0,20,"VSync False (Flip presents immediately)"
EndIf
Text 0,40,"Measured: "+fps+" fps"
Flip
Wend
End