// Loaded into main.jai so it inherits global imports. #scope_file debug_lines: [..] string; debug_panel: UI_Panel; panel_initialized := false; #scope_export debug_add_value :: (fmt: string, args: .. Any) { builder: String_Builder; print_to_builder(*builder, fmt, ..args); array_add(*debug_lines, builder_to_string(*builder)); } render_debug_overlay :: (font: *Simp.Dynamic_Font) { if !font return; if !panel_initialized { debug_panel.x = cast(float)window_width - 800.0; debug_panel.y = cast(float)window_height - 40.0; debug_panel.w = 300.0; debug_panel.h = 40.0; debug_panel.font = font; ui_register_panel(*debug_panel); panel_initialized = true; } target_h := 50.0 + debug_lines.count * 32.0; top := debug_panel.y + debug_panel.h; debug_panel.h = target_h; debug_panel.y = top - debug_panel.h; array_reset_keeping_memory(*debug_panel.elements); array_add(*debug_panel.elements, .{type=.HEADER, id=0, x0=0.0, y0=debug_panel.h - 40.0, x1=debug_panel.w, y1=debug_panel.h, label="Debug"}); y := debug_panel.h - 40.0; for debug_lines { y -= 32.0; array_add(*debug_panel.elements, .{type=.DYNAMIC_TEXT, id=0, x0=10.0, y0=y, x1=debug_panel.w, y1=y+32.0, label=it}); } } clear_debug_overlay :: () { for debug_lines free(it); array_reset_keeping_memory(*debug_lines); }