mirror of
https://github.com/gnif/LookingGlass.git
synced 2024-11-14 21:17:54 +00:00
[client] overlay: allow registration of runtime configuration options
This commit is contained in:
parent
4e81c7f724
commit
f3f0157d3c
4 changed files with 75 additions and 15 deletions
|
@ -820,11 +820,11 @@ static int lg_run(void)
|
||||||
DEBUG_INFO("Using font: %s", g_state.fontName);
|
DEBUG_INFO("Using font: %s", g_state.fontName);
|
||||||
|
|
||||||
g_state.overlays = ll_new();
|
g_state.overlays = ll_new();
|
||||||
|
app_registerOverlay(&LGOverlayConfig, NULL);
|
||||||
app_registerOverlay(&LGOverlayAlert , NULL);
|
app_registerOverlay(&LGOverlayAlert , NULL);
|
||||||
app_registerOverlay(&LGOverlayFPS , NULL);
|
app_registerOverlay(&LGOverlayFPS , NULL);
|
||||||
app_registerOverlay(&LGOverlayGraphs, NULL);
|
app_registerOverlay(&LGOverlayGraphs, NULL);
|
||||||
app_registerOverlay(&LGOverlayHelp , NULL);
|
app_registerOverlay(&LGOverlayHelp , NULL);
|
||||||
app_registerOverlay(&LGOverlayConfig, NULL);
|
|
||||||
|
|
||||||
// initialize metrics ringbuffers
|
// initialize metrics ringbuffers
|
||||||
g_state.renderTimings = ringbuffer_new(256, sizeof(float));
|
g_state.renderTimings = ringbuffer_new(256, sizeof(float));
|
||||||
|
|
|
@ -21,27 +21,50 @@
|
||||||
#include "interface/overlay.h"
|
#include "interface/overlay.h"
|
||||||
#include "cimgui.h"
|
#include "cimgui.h"
|
||||||
#include "overlay_utils.h"
|
#include "overlay_utils.h"
|
||||||
|
#include "ll.h"
|
||||||
|
|
||||||
#include "../main.h"
|
#include "../main.h"
|
||||||
#include "../overlays.h"
|
#include "../overlays.h"
|
||||||
#include "version.h"
|
#include "version.h"
|
||||||
|
|
||||||
|
#include "common/debug.h"
|
||||||
#include "common/appstrings.h"
|
#include "common/appstrings.h"
|
||||||
|
|
||||||
|
typedef struct ConfigCallback
|
||||||
|
{
|
||||||
|
const char * title;
|
||||||
|
void * udata;
|
||||||
|
void (*callback)(void * udata);
|
||||||
|
}
|
||||||
|
ConfigCallback;
|
||||||
|
|
||||||
|
typedef struct OverlayConfig
|
||||||
|
{
|
||||||
|
struct ll * callbacks;
|
||||||
|
}
|
||||||
|
OverlayConfig;
|
||||||
|
|
||||||
|
static OverlayConfig cfg = { 0 };
|
||||||
|
|
||||||
static bool config_init(void ** udata, void * params)
|
static bool config_init(void ** udata, void * params)
|
||||||
{
|
{
|
||||||
|
cfg.callbacks = ll_new();
|
||||||
|
if (!cfg.callbacks)
|
||||||
|
{
|
||||||
|
DEBUG_ERROR("failed to allocate ram");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void config_free(void * udata)
|
static void config_free(void * udata)
|
||||||
{
|
{
|
||||||
}
|
ConfigCallback * cb;
|
||||||
|
while(ll_shift(cfg.callbacks, (void **)&cb))
|
||||||
|
free(cb);
|
||||||
|
|
||||||
static void graphIterator(GraphHandle handle, const char * name, bool * enabled,
|
ll_free(cfg.callbacks);
|
||||||
void * udata)
|
|
||||||
{
|
|
||||||
igTableNextColumn();
|
|
||||||
igCheckbox(name, enabled);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int config_render(void * udata, bool interactive, struct Rect * windowRects,
|
static int config_render(void * udata, bool interactive, struct Rect * windowRects,
|
||||||
|
@ -132,14 +155,12 @@ static int config_render(void * udata, bool interactive, struct Rect * windowRec
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(igCollapsingHeaderBoolPtr("Performance Metrics", NULL, 0))
|
ConfigCallback * cb;
|
||||||
|
for (ll_reset(cfg.callbacks); ll_walk(cfg.callbacks, (void **)&cb); )
|
||||||
{
|
{
|
||||||
igCheckbox("Show Timing Graphs", &g_state.showTiming);
|
if (!igCollapsingHeaderBoolPtr(cb->title, NULL, 0))
|
||||||
igSeparator();
|
continue;
|
||||||
|
cb->callback(cb->udata);
|
||||||
igBeginTable("split", 2, 0, (ImVec2){}, 0);
|
|
||||||
overlayGraph_iterate(graphIterator, NULL);
|
|
||||||
igEndTable();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
overlayGetImGuiRect(windowRects);
|
overlayGetImGuiRect(windowRects);
|
||||||
|
@ -154,3 +175,19 @@ struct LG_OverlayOps LGOverlayConfig =
|
||||||
.free = config_free,
|
.free = config_free,
|
||||||
.render = config_render
|
.render = config_render
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void overlayConfig_register(const char * title, void (*callback)(void * udata),
|
||||||
|
void * udata)
|
||||||
|
{
|
||||||
|
ConfigCallback * cb = calloc(1, sizeof(*cb));
|
||||||
|
if (!cb)
|
||||||
|
{
|
||||||
|
DEBUG_ERROR("failed to allocate ram");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
cb->title = title;
|
||||||
|
cb->udata = udata;
|
||||||
|
cb->callback = callback;
|
||||||
|
ll_push(cfg.callbacks, cb);
|
||||||
|
};
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
#include "cimgui.h"
|
#include "cimgui.h"
|
||||||
|
|
||||||
#include "../main.h"
|
#include "../main.h"
|
||||||
|
#include "../overlays.h"
|
||||||
|
|
||||||
#include "ll.h"
|
#include "ll.h"
|
||||||
#include "common/debug.h"
|
#include "common/debug.h"
|
||||||
|
@ -43,9 +44,28 @@ struct OverlayGraph
|
||||||
float max;
|
float max;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
static void configCallback(void * udata)
|
||||||
|
{
|
||||||
|
igCheckbox("Show Timing Graphs", &g_state.showTiming);
|
||||||
|
igSeparator();
|
||||||
|
|
||||||
|
igBeginTable("split", 2, 0, (ImVec2){}, 0);
|
||||||
|
|
||||||
|
GraphHandle graph;
|
||||||
|
for (ll_reset(gs.graphs); ll_walk(gs.graphs, (void **)&graph); )
|
||||||
|
{
|
||||||
|
igTableNextColumn();
|
||||||
|
igCheckbox(graph->name, &graph->enabled);
|
||||||
|
}
|
||||||
|
|
||||||
|
igEndTable();
|
||||||
|
}
|
||||||
|
|
||||||
static bool graphs_init(void ** udata, void * params)
|
static bool graphs_init(void ** udata, void * params)
|
||||||
{
|
{
|
||||||
gs.graphs = ll_new();
|
gs.graphs = ll_new();
|
||||||
|
overlayConfig_register("Performance Metrics", configCallback, NULL);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -33,6 +33,9 @@ GraphHandle overlayGraph_register(const char * name, RingBuffer buffer,
|
||||||
float min, float max);
|
float min, float max);
|
||||||
void overlayGraph_unregister();
|
void overlayGraph_unregister();
|
||||||
void overlayGraph_iterate(void (*callback)(GraphHandle handle, const char * name,
|
void overlayGraph_iterate(void (*callback)(GraphHandle handle, const char * name,
|
||||||
bool * enabled, void * udata), void * udata);
|
bool * enabled, void * udata), void * udata);
|
||||||
|
|
||||||
|
void overlayConfig_register(const char * title, void (*callback)(void * udata),
|
||||||
|
void * udata);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue