Add option for fixed output framerate (useful for MacOS)
Some checks failed
CD / ${{ matrix.platform.name }} ${{ matrix.config.name }} (map[flags:-DBUILD_SHARED_LIBS=FALSE name:Static], map[artifact_name:linux32 flags:32 name:Linux GCC 32 os:ubuntu-latest]) (push) Has been cancelled
CD / ${{ matrix.platform.name }} ${{ matrix.config.name }} (map[flags:-DBUILD_SHARED_LIBS=FALSE name:Static], map[artifact_name:linux64 flags:64 name:Linux GCC x64 os:ubuntu-latest]) (push) Has been cancelled
CD / ${{ matrix.platform.name }} ${{ matrix.config.name }} (map[flags:-DBUILD_SHARED_LIBS=FALSE name:Static], map[artifact_name:linuxarm32 flags:arm32 name:Linux GCC ARM 32 os:ubuntu-latest]) (push) Has been cancelled
CD / ${{ matrix.platform.name }} ${{ matrix.config.name }} (map[flags:-DBUILD_SHARED_LIBS=FALSE name:Static], map[artifact_name:linuxarm64 flags:arm64 name:Linux GCC ARM 64 os:ubuntu-latest]) (push) Has been cancelled
CD / ${{ matrix.platform.name }} ${{ matrix.config.name }} (map[flags:-DBUILD_SHARED_LIBS=FALSE name:Static], map[artifact_name:macos name:macOS Apple Silicon os:macos-14]) (push) Has been cancelled
CD / ${{ matrix.platform.name }} ${{ matrix.config.name }} (map[flags:-DBUILD_SHARED_LIBS=FALSE name:Static], map[artifact_name:win32 flags:-A Win32 -DCMAKE_PARALLEL_MSVC=TRUE -DCMAKE_PREPARE_WINDOWS_DRIVERS=TRUE name:Windows VS2022 Win32 os:windows-2022]) (push) Has been cancelled
CD / ${{ matrix.platform.name }} ${{ matrix.config.name }} (map[flags:-DBUILD_SHARED_LIBS=FALSE name:Static], map[artifact_name:win64 flags:-A x64 -DCMAKE_PARALLEL_MSVC=TRUE -DCMAKE_PREPARE_WINDOWS_DRIVERS=TRUE name:Windows VS2022 x64 os:windows-2022]) (push) Has been cancelled
CD / ${{ matrix.platform.name }} ${{ matrix.config.name }} (map[flags:-DBUILD_SHARED_LIBS=FALSE name:Static], map[artifact_name:winarm64 flags:-A ARM64 -DCMAKE_PARALLEL_MSVC=TRUE -DCMAKE_PREPARE_WINDOWS_DRIVERS=TRUE name:Windows VS2022 ARM os:windows-2022]) (push) Has been cancelled
CD / Create Pi Mono Setup (push) Has been cancelled
CD / Publishing (push) Has been cancelled

This commit is contained in:
Lorenzooone
2026-06-02 22:18:23 +02:00
parent 85dec4fbbb
commit f6c0fffe4a
13 changed files with 390 additions and 8 deletions

View File

@@ -527,6 +527,14 @@ void reset_display_data(DisplayData* display_data) {
display_data->last_connected_ds = false;
display_data->interleaved_3d = false;
display_data->do_ratio_cycling = false;
#if (defined(__APPLE__))
// Should this be the default...?
//display_data->fixed_output_framerate = true;
display_data->fixed_output_framerate = false;
#else
display_data->fixed_output_framerate = false;
#endif
display_data->target_fixed_output_framerate = 60.00;
}
void reset_input_data(InputData* input_data) {
@@ -572,7 +580,13 @@ void reset_screen_info(ScreenInfo &info) {
info.top_rotation = 0;
info.bot_rotation = 0;
info.show_mouse = true;
#if (defined(__APPLE__))
// Should this be the default...?
//info.v_sync_enabled = true;
info.v_sync_enabled = false;
#else
info.v_sync_enabled = false;
#endif
#if (defined(RASPI) || defined(ANDROID_COMPILATION) || defined(__APPLE__))
info.async = false;
#else
@@ -922,6 +936,13 @@ std::string save_screen_info(std::string base, const ScreenInfo &info) {
return out;
}
void sanitize_display_data(DisplayData* display_data) {
if(display_data->target_fixed_output_framerate < 2.0)
display_data->target_fixed_output_framerate = 2.0;
if(display_data->target_fixed_output_framerate > 999.99)
display_data->target_fixed_output_framerate = 999.99;
}
void joystick_axis_poll(std::queue<SFEvent> &events_queue) {
for(unsigned int i = 0; i < sf::Joystick::Count; i++) {
if(!sf::Joystick::isConnected(i))
@@ -1144,12 +1165,28 @@ void update_connected_specific_settings(FrontendData* frontend_data, const Captu
}
}
void default_sleep(float wanted_ms) {
void default_sleep(double wanted_ms) {
if(wanted_ms < 0)
wanted_ms = 1000.0f/USB_CHECKS_PER_SECOND;
wanted_ms = 1000.0/USB_CHECKS_PER_SECOND;
sf::sleep(sf::microseconds((int)(wanted_ms * 1000)));
}
void precise_sleep(double wanted_ms, double divisor, double spin_threshold_ms) {
if(wanted_ms < 0)
wanted_ms = 1000.0/USB_CHECKS_PER_SECOND;
double elapsed_ms = 0.0;
std::chrono::time_point<std::chrono::high_resolution_clock> start_time = std::chrono::high_resolution_clock::now();
while(elapsed_ms < wanted_ms){
double difference_ms = wanted_ms - elapsed_ms;
// Is there a better way to do this?!
if(difference_ms > spin_threshold_ms)
default_sleep(difference_ms / divisor);
std::chrono::time_point<std::chrono::high_resolution_clock> curr_time = std::chrono::high_resolution_clock::now();
const std::chrono::duration<double> diff = curr_time - start_time;
elapsed_ms = diff.count() * 1000.0;
}
}
void screen_display_thread(WindowScreen *screen) {
screen->display_thread();
}