#include <chrono>
#include <thread>
const bool force_fps_limit = true;
void calculate_next_physical_frame() {
//TODO: add logic to move objects around
}
void display_current_frame_to_screen() {
//TODO: add logic to display objects to screen
}
int main() {
auto current_time = std::chrono::high_resolution_clock::now();
const auto physical_frame_length = std::chrono::milliseconds{1000 / 60};
for (;;) {
while (std::chrono::high_resolution_clock::now() - current_time > physical_frame_length) {
calculate_next_physical_frame();
current_time += physical_frame_length;
}
display_current_frame_to_screen();
if (force_fps_limit) {
std::this_thread::sleep_until(current_time + physical_frame_length);
}
}
}
I2luY2x1ZGUgPGNocm9ubz4KI2luY2x1ZGUgPHRocmVhZD4KCmNvbnN0IGJvb2wgZm9yY2VfZnBzX2xpbWl0ID0gdHJ1ZTsKCnZvaWQgY2FsY3VsYXRlX25leHRfcGh5c2ljYWxfZnJhbWUoKSB7CiAgICAvL1RPRE86IGFkZCBsb2dpYyB0byBtb3ZlIG9iamVjdHMgYXJvdW5kCn0Kdm9pZCBkaXNwbGF5X2N1cnJlbnRfZnJhbWVfdG9fc2NyZWVuKCkgewogICAgLy9UT0RPOiBhZGQgbG9naWMgdG8gZGlzcGxheSBvYmplY3RzIHRvIHNjcmVlbgp9CgppbnQgbWFpbigpIHsKICAgIGF1dG8gY3VycmVudF90aW1lID0gc3RkOjpjaHJvbm86OmhpZ2hfcmVzb2x1dGlvbl9jbG9jazo6bm93KCk7CiAgICBjb25zdCBhdXRvIHBoeXNpY2FsX2ZyYW1lX2xlbmd0aCA9IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHN7MTAwMCAvIDYwfTsKICAgIGZvciAoOzspIHsKICAgICAgICB3aGlsZSAoc3RkOjpjaHJvbm86OmhpZ2hfcmVzb2x1dGlvbl9jbG9jazo6bm93KCkgLSBjdXJyZW50X3RpbWUgPiBwaHlzaWNhbF9mcmFtZV9sZW5ndGgpIHsKICAgICAgICAgICAgY2FsY3VsYXRlX25leHRfcGh5c2ljYWxfZnJhbWUoKTsKICAgICAgICAgICAgY3VycmVudF90aW1lICs9IHBoeXNpY2FsX2ZyYW1lX2xlbmd0aDsKICAgICAgICB9CiAgICAgICAgZGlzcGxheV9jdXJyZW50X2ZyYW1lX3RvX3NjcmVlbigpOwogICAgICAgIGlmIChmb3JjZV9mcHNfbGltaXQpIHsKICAgICAgICAgICAgc3RkOjp0aGlzX3RocmVhZDo6c2xlZXBfdW50aWwoY3VycmVudF90aW1lICsgcGh5c2ljYWxfZnJhbWVfbGVuZ3RoKTsKICAgICAgICB9CiAgICB9Cn0K