diff options
| -rw-r--r-- | meson.build | 2 | ||||
| -rw-r--r-- | src/fmt/nut.c | 1 | ||||
| -rw-r--r-- | src/render.c | 9 |
3 files changed, 10 insertions, 2 deletions
diff --git a/meson.build b/meson.build index db0abc7..277e822 100644 --- a/meson.build +++ b/meson.build @@ -1,5 +1,7 @@ project('animtool', 'c', default_options: ['warning_level=2', 'c_std=c23']) +add_project_arguments(['-D_XOPEN_SOURCE=800', '-D_POSIX_C_SOURCE=202405L'], language: 'c') + cc = meson.get_compiler('c') opengl = dependency('opengl') diff --git a/src/fmt/nut.c b/src/fmt/nut.c index 99f9a69..f9ca9fd 100644 --- a/src/fmt/nut.c +++ b/src/fmt/nut.c @@ -1,3 +1,4 @@ +#define _DEFAULT_SOURCE // can be removed once glibc knows about <endian.h> in POSIX 2024 #include <stdio.h> #include <stdlib.h> #include <stdbit.h> diff --git a/src/render.c b/src/render.c index 9c7d796..fd88278 100644 --- a/src/render.c +++ b/src/render.c @@ -146,8 +146,13 @@ static void render_seq(size_t n_inst, struct seq_inst inst[n_inst], struct scene (ts_now.tv_nsec - state->start_ts.tv_nsec) / 1000000000.0 + (ts_now.tv_sec - state->start_ts.tv_sec); double ahead = time - e_time - scene->live.data; - if (ahead > 0.0) - usleep(ahead * 1000000.0); + if (ahead > 0.0) { + uint64_t nanos = ahead * 1000000000.0; + struct timespec ts_sleep; + ts_sleep.tv_nsec = nanos % 1000000000; + ts_sleep.tv_sec = nanos / 1000000000; + nanosleep(&ts_sleep, nullptr); + } } struct draw_frame frame; |
