From daf2ced42332d132675298e5f52c3482ff857ba0 Mon Sep 17 00:00:00 2001 From: cinnaboot Date: Sat, 9 Apr 2022 12:13:10 -0400 Subject: [PATCH] add a user_data parameter for render loop callback functions --- examples/main.cpp | 4 ++-- include/tangerine.h | 5 +++-- src/tangerine.cpp | 7 ++++--- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/examples/main.cpp b/examples/main.cpp index 375449c..d85a947 100644 --- a/examples/main.cpp +++ b/examples/main.cpp @@ -261,7 +261,7 @@ orbitPositionZ0(vec4* pos, float angle) } void -render_cb_pre(RenderState* rs) +render_cb_pre(RenderState* rs, void* user_data = nullptr) { SDL_Event e; @@ -332,7 +332,7 @@ main() return 1; } - doRenderLoop(rs, 60, render_cb_pre, nullptr); + doRenderLoop(rs, 60, render_cb_pre, nullptr, nullptr); freeRenderState(rs); return 0; diff --git a/include/tangerine.h b/include/tangerine.h index b1d2da5..0111f93 100644 --- a/include/tangerine.h +++ b/include/tangerine.h @@ -234,7 +234,7 @@ Entity* getFreeEntity(RenderGroup* rg); Entity* getEntityByName(RenderGroup* rg, const char* name); // NOTE: callback function signature to use with renDoRenderLoop() -typedef void (*frame_callback_fn) (RenderState*); +typedef void (*frame_callback_fn) (RenderState*, void*); // NOTE: There are 2 callbacks to use here, cb_func_pre is called before // the call to renRenderFrame(), cb_fun_post is called after @@ -243,7 +243,8 @@ typedef void (*frame_callback_fn) (RenderState*); void doRenderLoop(RenderState* rs, uint framerate = 60, frame_callback_fn cb_func_pre = nullptr, - frame_callback_fn cb_func_post = nullptr); + frame_callback_fn cb_func_post = nullptr, + void* user_data = nullptr); void renderFrame(RenderState* rs, const GLClearColor& clear_col); diff --git a/src/tangerine.cpp b/src/tangerine.cpp index 551a4f2..ccf7d72 100644 --- a/src/tangerine.cpp +++ b/src/tangerine.cpp @@ -175,7 +175,8 @@ void doRenderLoop(RenderState* rs, u32 framerate, frame_callback_fn cb_func_pre, - frame_callback_fn cb_func_post) + frame_callback_fn cb_func_post, + void* user_data) { u32 delay = (framerate > 0) ? 1 / framerate : 0; u32 frameStart, frameTime; @@ -186,7 +187,7 @@ doRenderLoop(RenderState* rs, frameStart = SDL_GetTicks(); if (cb_func_pre != nullptr) { - cb_func_pre(rs); + cb_func_pre(rs, user_data); } else { while (SDL_PollEvent(&e)) { if (e.type == SDL_QUIT || @@ -201,7 +202,7 @@ doRenderLoop(RenderState* rs, renderFrame(rs, rs->clear_col); if (cb_func_post != nullptr) - cb_func_post(rs); + cb_func_post(rs, user_data); SDL_GL_SwapWindow(rs->handles.window); frameTime = SDL_GetTicks() - frameStart;