From 4ed5536bcc2632b04d4c62a0c67bfa2ba62e9201 Mon Sep 17 00:00:00 2001 From: fincs Date: Mon, 30 Oct 2017 21:06:23 +0100 Subject: [PATCH] Add C3D_FrameEndHook() --- include/c3d/renderqueue.h | 2 ++ source/renderqueue.c | 11 +++++++++++ 2 files changed, 13 insertions(+) diff --git a/include/c3d/renderqueue.h b/include/c3d/renderqueue.h index 5ccf3f3..10eb486 100644 --- a/include/c3d/renderqueue.h +++ b/include/c3d/renderqueue.h @@ -35,6 +35,8 @@ bool C3D_FrameDrawOn(C3D_RenderTarget* target); void C3D_FrameSplit(u8 flags); void C3D_FrameEnd(u8 flags); +void C3D_FrameEndHook(void (* hook)(void*), void* param); + float C3D_GetDrawingTime(void); float C3D_GetProcessingTime(void); diff --git a/source/renderqueue.c b/source/renderqueue.c index 054ebc8..8fb21e2 100644 --- a/source/renderqueue.c +++ b/source/renderqueue.c @@ -21,6 +21,8 @@ static u8 frameStage; static float framerate = 60.0f; static float framerateCounter[2] = { 60.0f, 60.0f }; static u32 frameCounter[2]; +static void (* frameEndCb)(void*); +static void* frameEndCbData; static bool framerateLimit(int id) { @@ -242,6 +244,9 @@ void C3D_FrameEnd(u8 flags) { C3D_Context* ctx = C3Di_GetContext(); + if (frameEndCb) + frameEndCb(frameEndCbData); + C3D_FrameSplit(flags); inFrame = false; osTickCounterUpdate(&cpuTime); @@ -279,6 +284,12 @@ void C3D_FrameEnd(u8 flags) gxCmdQueueRun(&ctx->gxQueue); } +void C3D_FrameEndHook(void (* hook)(void*), void* param) +{ + frameEndCb = hook; + frameEndCbData = param; +} + float C3D_GetDrawingTime(void) { return osTickCounterRead(&gpuTime);