summaryrefslogtreecommitdiff
path: root/src/main/frame-hooks.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/frame-hooks.c')
-rw-r--r--src/main/frame-hooks.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/main/frame-hooks.c b/src/main/frame-hooks.c
new file mode 100644
index 0000000..ae7bc1e
--- /dev/null
+++ b/src/main/frame-hooks.c
@@ -0,0 +1,27 @@
+#include "frame-hooks.h"
+
+#include "dged/hook.h"
+
+HOOK_IMPL_NO_REMOVE(next_frame, next_frame_cb);
+
+static next_frame_hook_vec g_next_frame_hooks;
+static uint32_t g_next_frame_hook_id;
+
+void init_frame_hooks(void) { VEC_INIT(&g_next_frame_hooks, 16); }
+
+void teardown_frame_hooks(void) { VEC_DESTROY(&g_next_frame_hooks); }
+
+void run_next_frame(next_frame_cb callback, void *userdata) {
+ insert_next_frame_hook(&g_next_frame_hooks, &g_next_frame_hook_id, callback,
+ userdata);
+}
+
+size_t dispatch_next_frame_hooks() {
+ size_t nhooks = VEC_SIZE(&g_next_frame_hooks);
+ if (nhooks > 0) {
+ dispatch_hook_no_args(&g_next_frame_hooks, struct next_frame_hook);
+ VEC_CLEAR(&g_next_frame_hooks);
+ }
+
+ return nhooks;
+}