mirror of
https://github.com/TwilitRealm/dusklight
synced 2026-05-27 15:42:42 -04:00
2da6590657
* Add interpolation frame rate cap * wip: reworked framelimiter Based on my testing this is a bit more stable in frametimes. * wip: efficiency improvement + windows build fix Significantly improve efficiency by using a hybrid approach. * wip: UI changes * wip: end frame AFTER limiting * wip: remove unused include * wip: minor ui code change Makes it easier to remove/add presets * Simplify Limiter UI - Change enableFrameInterpolation to an enum with off/capped/unlimited values - Simplify the UI to use 2 settings (unlock framerate + a max value entry) * wip: slight limiter simplification * wip: implement review suggestions * wip: fix syntax error * wip: revert enum order + replace old checks * Fix compile error --------- Co-authored-by: SailorSnoW <sailorsnow@pm.me> Co-authored-by: Loïs <49660929+SailorSnoW@users.noreply.github.com> Co-authored-by: SuperDude88 <82904174+SuperDude88@users.noreply.github.com> Co-authored-by: Luke Street <luke@street.dev>
55 lines
1.3 KiB
C++
55 lines
1.3 KiB
C++
#pragma once
|
|
|
|
#include <dolphin/mtx.h>
|
|
#include <stdbool.h>
|
|
#include <stddef.h>
|
|
#include <stdint.h>
|
|
#include "settings.h"
|
|
|
|
class camera_process_class;
|
|
class view_class;
|
|
|
|
#ifdef __cplusplus
|
|
namespace dusk {
|
|
namespace frame_interp {
|
|
|
|
void ensure_initialized();
|
|
|
|
void begin_record();
|
|
void end_record();
|
|
void begin_sim_tick();
|
|
uint64_t sim_tick_seq();
|
|
void begin_frame(FrameInterpMode mode, bool is_sim_frame, float step);
|
|
void interpolate();
|
|
float get_interpolation_step();
|
|
|
|
void request_presentation_sync();
|
|
bool presentation_sync_active();
|
|
|
|
bool is_enabled();
|
|
|
|
// TODO: These should be phased out as UI is progressively updated to use game_clock
|
|
void set_ui_tick_pending(bool value);
|
|
bool get_ui_tick_pending();
|
|
|
|
bool is_sim_frame();
|
|
|
|
void record_camera(::camera_process_class* cam, int camera_id);
|
|
void interp_view(::view_class* view);
|
|
void record_final_mtx(Mtx m, const void *key);
|
|
void record_final_mtx(Mtx m);
|
|
|
|
bool lookup_replacement(const void* key, Mtx out);
|
|
bool lookup_concat_replacement(const void* lhs, const void* rhs, Mtx out);
|
|
|
|
typedef void (*InterpolationCallBack)(bool isSimFrame, void* pUserWork);
|
|
// call on a sim tick, will get called during presentation
|
|
void add_interpolation_callback(InterpolationCallBack pCallBack, void* pUserWork);
|
|
|
|
void begin_presentation_camera();
|
|
void end_presentation_camera();
|
|
|
|
} // namespace frame_interp
|
|
} // namespace dusk
|
|
#endif
|