So, as others have said, this is because your graphics are waiting for v-synchronization before generating the next frame.
That said ...
Beware, not all monitors are updated at 60 Hz. 60 frames per second versus 30 frames per second is 70 frames per second versus 35 frames per second on a display with a frequency of 70 Hz.
If you do not want your card to wait for v-synchronization before the start of the next frame, but avoid gap anyway, use triple buffering. Then the GPU, and then the ping pong, displays 2 buffers while the 3rd is displayed. The v-sync event is what triggers the swap to the "ready" back buffer. This is still not very cool, because in the end you get several frames that remain on the screen more often than others: with your rendering, 1/45 the frame will remain for 1/30 seconds, and the next one at 1/60, giving some jerk.
Finally, with the advent of off-screen rendering (rendering on non-displayable buffers), it is theoretically possible that the driver does not wait for v-synchronization before the start of the next frame if the early work of this next frame happens so as not to touch the display surface. I don't think I've ever seen a driver be so smart though.
Bahbar
source share