История изменений
Исправление MOPKOBKA, (текущая версия) :
Если ты уже умеешь пропускать кадры, что же мешает пропускать их для лимита фпс?
С vsync ты уже решил, как я понял. Допустим частота монитора 60, без vsync у тебя 500 фпс, тебе нужен лимит условно 250. Точно так же пропускай каждый второй?
Если время с предыдущего кадра < 1/250, то не рисовать.
uint64_t prev_frame_time = 0;
for (;;) {
if (time_ns() - prev_frame_time > secf_to_ns(1.0f / 250.0f)) {
prev_frame_time = time_ns();
draw();
}
}
Пока что я придумал только вычесть из задержки время тратящееся на слип в линуксе.
А если задержка в несколько раз больше чем тебе надо?
Исправление MOPKOBKA, :
Если ты уже умеешь пропускать кадры, что же мешает пропускать их для лимита фпс?
С vsync ты уже решил, как я понял. Допустим частота монитора 60, без vsync у тебя 500 фпс, тебе нужен лимит условно 250. Точно так же пропускай каждый второй?
Если время с предыдущего кадра < 1/250, то не рисовать.
uint64_t t1 = 0;
for (;;) {
if (time_ns() - t1 > secf_to_ns(1.0f / 250.0f)) {
t1 = time_ns();
draw();
}
}
Пока что я придумал только вычесть из задержки время тратящееся на слип в линуксе.
А если задержка в несколько раз больше чем тебе надо?
Исправление MOPKOBKA, :
Если ты уже умеешь пропускать кадры, что же мешает пропускать их для лимита фпс?
С vsync ты уже решил, как я понял. Допустим частота монитора 60, без vsync у тебя 500 фпс, тебе нужен лимит условно 250. Точно так же пропускай каждый второй?
Если время с предыдущего кадра < 1/250, то не рисовать.
uint64_t t1 = 0;
uint64_t fps_limit = 250;
for (;;) {
if (time_ns() - t1 > secf_to_ns(1.0 / fps_limit)) {
t1 = time_ns();
draw();
}
}
Пока что я придумал только вычесть из задержки время тратящееся на слип в линуксе.
А если задержка в несколько раз больше чем тебе надо?
Исправление MOPKOBKA, :
Если ты уже умеешь пропускать кадры, что же мешает пропускать их для лимита фпс?
С vsync ты уже решил, как я понял. Допустим частота монитора 60, без vsync у тебя 500 фпс, тебе нужен лимит условно 250. Точно так же пропускай каждый второй?
Если время с предыдущего кадра < 1/250, то не рисовать.
uint64_t t1 = 0;
uint64_t fps_limit = 250;
for (;;) {
if (time_ns() - t1 > secf_to_ns(1.0 / fps_limit)) {
t1 = time_ns();
draw();
}
}
Исправление MOPKOBKA, :
Если ты уже умеешь пропускать кадры, что же мешает пропускать их для лимита фпс?
С vsync ты уже решил, как я понял. Допустим частота монитора 60, без vsync у тебя 500 фпс, тебе нужен лимит условно 250. Точно так же пропускай каждый второй?
Если время с предыдущего кадра < 1/250, то не рисовать.
uint64_t t1 = 0;
uint64_t fps_limit = 250;
for (;;) {
if (time_ns() - t1 > secf_to_ns(1.0 / fps_limit)) {
t1 = time_ns();
draw();
}
}
Исправление MOPKOBKA, :
Если ты уже умеешь пропускать кадры, что же мешает пропускать их для лимита фпс?
С vsync ты уже решил, как я понял. Допустим частота монитора 60, без vsync у тебя 500 фпс, тебе нужен лимит условно 250. Точно так же пропускай каждый второй?
Если время с предыдущего кадра < 1/250, то не рисовать.
Исправление MOPKOBKA, :
Если ты уже умеешь пропускать кадры, что же мешает пропускать их для лимита фпс?
С vsync ты уже решил, как я понял. Допустим частота монитора 60, без vsync у тебя 500 фпс, тебе нужен лимит условно 250. Точно так же пропускай каждый второй?
Так как в разную секунду разные фпс, то нужно просто измерять время между кадрами, и смотреть сколько еще подобных кадров ты сможешь сделать за секунду. На основе этого вычислять сколько кадров нужно пропустить.
Исправление MOPKOBKA, :
Если ты уже умеешь пропускать кадры, что же мешает пропускать их для лимита фпс?
С vsync ты уже решил, как я понял. Допустим частота монитора 60, без vsync у тебя 500 фпс, тебе нужен лимит условно 250. Точно так же пропускай каждый второй?
Так как в разную секунду разные фпс, то нужно просто измерять время между кадрами, и смотреть сколько еще подобных кадров ты сможешь сделать за секунду.
Исправление MOPKOBKA, :
Если ты уже умеешь пропускать кадры, что же мешает пропускать их для лимита фпс?
С vsync ты уже решил, как я понял. Допустим частота монитора 60, без vsync у тебя 500 фпс, тебе нужен лимит условно 250. Точно так же пропускай каждый второй?
Исходная версия MOPKOBKA, :
Если ты уже умеешь пропускать кадры, что же мешает пропускать их для лимита фпс?
С vsync ты уже решил, как я понял. Без vsync у тебя 500 фпс, тебе нужен лимит условно 250. Точно так же пропускай каждый второй?