Djentleman :
Vblank removes a frame right? Causing the input lag.
It is actually implementation-specific (game engines and their configurations).
A typical game engine loop looks like this (simplified):
C++:
while(true) {
Update();
Draw();
Present(); }
The
Update method retrieves user input and calculates World, View and Projection matrices (your position and direction).
After that the
Draw method draws the actual frame using the above mentioned matrices.
When the Draw is finished, it is time to
Present the frame to the display - usually using a
Swap Chain. The Swap Chain can be configured to
wait for
VSYNC using the D3D device
presentation interval property.
So, you have a 60 Hz (~16.7 ms) monitor but you can get 200 fps (5 ms) in game. In 5 ms, your PC can Update and Draw everything but with VSYNC enabled, it needs to wait additional 11.7 ms (16.7 - 5) each loop until it is visible on the display. In other words - you move your mouse and it will show after at least 11.7ms.
You can of course screw it more by bad programming skills and decisions of the developers (this is the most optimistic version). Some engines directly support
dropping/skipping multiple frames (eg.: Unity3D).