[client] app: implement new overlay rendering framework

This change set implements a framework for overlays to be registered
that make use of ImGui. See `overlay/fps` for a simple implementation
example.
This commit is contained in:
Geoffrey McRae
2021-07-22 17:27:30 +10:00
parent 30c4a4786b
commit fdbdf6f167
11 changed files with 385 additions and 124 deletions

View File

@@ -55,6 +55,7 @@
#include "clipboard.h"
#include "ll.h"
#include "egl_dynprocs.h"
#include "overlays.h"
// forwards
static int cursorThread(void * unused);
@@ -758,14 +759,15 @@ static int lg_run(void)
ImFontAtlas_GetTexDataAsRGBA32(g_state.io->Fonts, &text_pixels,
&text_w, &text_h, NULL);
g_state.graphs = ll_new();
g_state.overlays = ll_new();
app_registerOverlay(&LGOverlayFPS , NULL);
app_registerOverlay(&LGOverlayGraphs, NULL);
// initialize metrics ringbuffers
g_state.renderTimings = ringbuffer_new(256, sizeof(float));
g_state.frameTimings = ringbuffer_new(256, sizeof(float));
app_registerGraph("RENDER", g_state.renderTimings);
app_registerGraph("UPLOAD", g_state.frameTimings);
overlayGraph_register("RENDER", g_state.renderTimings);
overlayGraph_register("UPLOAD", g_state.frameTimings );
// search for the best displayserver ops to use
for(int i = 0; i < LG_DISPLAYSERVER_COUNT; ++i)
@@ -1091,6 +1093,13 @@ static void lg_shutdown(void)
lgmpClientFree(&g_state.lgmp);
if (g_state.overlays)
{
app_freeOverlays();
ll_free(g_state.overlays);
g_state.overlays = NULL;
}
if (e_frame)
{
lgFreeEvent(e_frame);