Время, которое вы должны потратить на рендеринг одного кадра, составляет 1/FPS
секунд (если вы стремитесь, скажем, к 10 кадрам в секунду, вы должны потратить 1/10 = 0,1 секунды на каждый кадр).Так что если рендеринг занял X
секунд, вы должны "спать" в течение 1/FPS - X
секунд.
Переводя это, например, в миллисекунды, вы получите
ms_to_sleep = 1000 / FPS - elapsed_ms;
Если это, дляпо какой-то причине для рендеринга кадра потребовалось более 1/FPS
, вы получите отрицательное время сна, и в этом случае вы просто пропустите режим сна.