mirror of
https://github.com/open-goal/jak-project
synced 2026-07-11 23:30:16 -04:00
add more comments/docstrings on first 58 files, try new windows-specific framelimiting (#1134)
* cleanup * type * link against a library
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
#include "FrameLimiter.h"
|
||||
#include <thread>
|
||||
|
||||
double FrameLimiter::round_to_nearest_60fps(double current) {
|
||||
double one_frame = 1.f / 60.f;
|
||||
int frames_missed = (current / one_frame); // rounds down
|
||||
if (frames_missed > 4) {
|
||||
frames_missed = 4;
|
||||
}
|
||||
return (frames_missed + 1) * one_frame;
|
||||
}
|
||||
|
||||
#ifdef __linux__
|
||||
|
||||
FrameLimiter::FrameLimiter() {}
|
||||
|
||||
FrameLimiter::~FrameLimiter() {}
|
||||
|
||||
void FrameLimiter::run(double target_fps,
|
||||
bool experimental_accurate_lag,
|
||||
bool do_sleeps,
|
||||
double engine_time) {
|
||||
double target_seconds;
|
||||
if (experimental_accurate_lag) {
|
||||
target_seconds = round_to_nearest_60fps(engine_time);
|
||||
} else {
|
||||
target_seconds = 1.f / target_fps;
|
||||
}
|
||||
double remaining_time = target_seconds - m_timer.getSeconds();
|
||||
|
||||
if (do_sleeps && remaining_time > 0.001) {
|
||||
std::this_thread::sleep_for(std::chrono::microseconds(int((remaining_time - 0.001) * 1e6)));
|
||||
}
|
||||
|
||||
while (remaining_time > 0) {
|
||||
remaining_time = target_seconds - m_timer.getSeconds();
|
||||
}
|
||||
|
||||
m_timer.start();
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
#include <Windows.h>
|
||||
|
||||
FrameLimiter::FrameLimiter() {
|
||||
timeBeginPeriod(1);
|
||||
}
|
||||
|
||||
FrameLimiter::~FrameLimiter() {
|
||||
timeEndPeriod(0);
|
||||
}
|
||||
|
||||
void FrameLimiter::run(double target_fps,
|
||||
bool experimental_accurate_lag,
|
||||
bool do_sleeps,
|
||||
double engine_time) {
|
||||
double target_seconds;
|
||||
if (experimental_accurate_lag) {
|
||||
target_seconds = round_to_nearest_60fps(engine_time);
|
||||
} else {
|
||||
target_seconds = 1.f / target_fps;
|
||||
}
|
||||
double remaining_time = target_seconds - m_timer.getSeconds();
|
||||
|
||||
if (do_sleeps && remaining_time > 0.001) {
|
||||
Sleep((remaining_time * 1000) - 1);
|
||||
}
|
||||
|
||||
while (remaining_time > 0) {
|
||||
remaining_time = target_seconds - m_timer.getSeconds();
|
||||
}
|
||||
|
||||
m_timer.start();
|
||||
}
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user