The open source OpenXR runtime
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

u/var: Add u_var_curve

Let's you draw any arbitrary curve from a getter function.

authored by

Mateo de Mayo and committed by
Moses Turner
0324fbae bf9e6fa3

+48 -1
+22 -1
src/xrt/auxiliary/util/u_var.h
··· 121 121 float height; //!< Widget height or 0 for auto 122 122 }; 123 123 124 + struct u_var_curve_point 125 + { 126 + // Using doubles like ImPlotPoint 127 + double x; 128 + double y; 129 + }; 130 + 131 + typedef struct u_var_curve_point (*u_var_curve_getter)(void *data, int i); 132 + 133 + struct u_var_curve 134 + { 135 + u_var_curve_getter getter; //!< Getter of 2D points for the curve 136 + void *data; //!< User data for `getter` 137 + int count; //!< Number of points to draw; param i < count 138 + const char *label; //!< Curve name 139 + const char *xlabel; //!< Label of the X axis 140 + const char *ylabel; //!< Label of the Y axis 141 + }; 142 + 124 143 /*! 125 144 * What kind of variable is this tracking. 126 145 */ ··· 161 180 U_VAR_KIND_COMBO, 162 181 U_VAR_KIND_HISTOGRAM_F32, 163 182 U_VAR_KIND_DRAGGABLE_U16, 183 + U_VAR_KIND_CURVE, 164 184 }; 165 185 166 186 #define U_VAR_NAME_STRING_SIZE 256 ··· 269 289 ADD_FUNC(combo, struct u_var_combo, COMBO) \ 270 290 ADD_FUNC(draggable_f32, struct u_var_draggable_f32, DRAGGABLE_F32) \ 271 291 ADD_FUNC(draggable_u16, struct u_var_draggable_u16, DRAGGABLE_U16) \ 272 - ADD_FUNC(histogram_f32, struct u_var_histogram_f32, HISTOGRAM_F32) 292 + ADD_FUNC(histogram_f32, struct u_var_histogram_f32, HISTOGRAM_F32) \ 293 + ADD_FUNC(curve, struct u_var_curve, CURVE) 273 294 274 295 #define ADD_FUNC(SUFFIX, TYPE, ENUM) void u_var_add_##SUFFIX(void *, TYPE *, const char *); 275 296
+26
src/xrt/state_trackers/gui/gui_scene_debug.c
··· 245 245 igPlotHistogramFloatPtr(name, h->values, h->count, 0, NULL, FLT_MAX, FLT_MAX, zero, sizeof(float)); 246 246 } 247 247 248 + 249 + static ImPlotPoint 250 + curve_var_implot_getter(void *ptr, int i) 251 + { 252 + struct u_var_curve *c = (struct u_var_curve *)ptr; 253 + struct u_var_curve_point point = c->getter(c->data, i); 254 + ImPlotPoint implot_point = {point.x, point.y}; 255 + return implot_point; 256 + } 257 + 258 + static void 259 + on_curve_var(const char *name, void *ptr) 260 + { 261 + struct u_var_curve *c = (struct u_var_curve *)ptr; 262 + ImVec2 size = {igGetWindowContentRegionWidth(), 256}; 263 + 264 + bool shown = ImPlot_BeginPlot(name, c->xlabel, c->ylabel, size, 0, 0, 0, 0, 0); 265 + if (!shown) { 266 + return; 267 + } 268 + 269 + ImPlot_PlotLineG(c->label, curve_var_implot_getter, c, c->count, 0); 270 + ImPlot_EndPlot(); 271 + } 272 + 248 273 static void 249 274 on_draggable_f32_var(const char *name, void *ptr) 250 275 { ··· 394 419 case U_VAR_KIND_COMBO: on_combo_var(name, ptr); break; 395 420 case U_VAR_KIND_DRAGGABLE_U16: on_draggable_u16_var(name, ptr); break; 396 421 case U_VAR_KIND_HISTOGRAM_F32: on_histogram_f32_var(name, ptr); break; 422 + case U_VAR_KIND_CURVE: on_curve_var(name, ptr); break; 397 423 default: igLabelText(name, "Unknown tag '%i'", kind); break; 398 424 } 399 425 }