Browse Source

add a user_data parameter for render loop callback functions

merge_shader_testing
cinnaboot 4 years ago
parent
commit
52f2256b51
  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 void
render_cb_pre(RenderState* rs) render_cb_pre(RenderState* rs, void* user_data = nullptr)
{ {
SDL_Event e; SDL_Event e;
@ -332,7 +332,7 @@ main()
return 1; return 1;
} }
doRenderLoop(rs, 60, render_cb_pre, nullptr); doRenderLoop(rs, 60, render_cb_pre, nullptr, nullptr);
freeRenderState(rs); freeRenderState(rs);
return 0; return 0;

5
include/tangerine.h

@ -234,7 +234,7 @@ Entity* getFreeEntity(RenderGroup* rg);
Entity* getEntityByName(RenderGroup* rg, const char* name); Entity* getEntityByName(RenderGroup* rg, const char* name);
// NOTE: callback function signature to use with renDoRenderLoop() // 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 // NOTE: There are 2 callbacks to use here, cb_func_pre is called before
// the call to renRenderFrame(), cb_fun_post is called after // the call to renRenderFrame(), cb_fun_post is called after
@ -243,7 +243,8 @@ typedef void (*frame_callback_fn) (RenderState*);
void doRenderLoop(RenderState* rs, void doRenderLoop(RenderState* rs,
uint framerate = 60, uint framerate = 60,
frame_callback_fn cb_func_pre = nullptr, 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); void renderFrame(RenderState* rs, const GLClearColor& clear_col);

7
src/tangerine.cpp

@ -175,7 +175,8 @@ void
doRenderLoop(RenderState* rs, doRenderLoop(RenderState* rs,
u32 framerate, u32 framerate,
frame_callback_fn cb_func_pre, 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 delay = (framerate > 0) ? 1 / framerate : 0;
u32 frameStart, frameTime; u32 frameStart, frameTime;
@ -186,7 +187,7 @@ doRenderLoop(RenderState* rs,
frameStart = SDL_GetTicks(); frameStart = SDL_GetTicks();
if (cb_func_pre != nullptr) { if (cb_func_pre != nullptr) {
cb_func_pre(rs); cb_func_pre(rs, user_data);
} else { } else {
while (SDL_PollEvent(&e)) { while (SDL_PollEvent(&e)) {
if (e.type == SDL_QUIT || if (e.type == SDL_QUIT ||
@ -201,7 +202,7 @@ doRenderLoop(RenderState* rs,
renderFrame(rs, rs->clear_col); renderFrame(rs, rs->clear_col);
if (cb_func_post != nullptr) if (cb_func_post != nullptr)
cb_func_post(rs); cb_func_post(rs, user_data);
SDL_GL_SwapWindow(rs->handles.window); SDL_GL_SwapWindow(rs->handles.window);
frameTime = SDL_GetTicks() - frameStart; frameTime = SDL_GetTicks() - frameStart;

Loading…
Cancel
Save