Browse Source

add a user_data parameter for render loop callback functions

main
cinnaboot 4 years ago
parent
commit
daf2ced423
  1. 4
      examples/main.cpp
  2. 5
      include/tangerine.h
  3. 7
      src/tangerine.cpp

4
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;

5
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);

7
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;

Loading…
Cancel
Save