2026-03-19 23:16:20 +01:00
2026-03-19 23:16:20 +01:00
2026-03-19 23:16:20 +01:00
2026-03-19 23:16:20 +01:00
2026-03-19 23:16:06 +01:00
2026-03-19 23:16:20 +01:00

Visualize

Visualize is a real-time graph viewer for instrumenting your programs.

You run a graphical app (visualize.exe), then your own program connects through a small C/C++ header-only API and streams plot data into shared memory. The viewer reads that memory and draws graphs live.

Demo video: visualize_plot_zooms.mp4

What this project is for

  • Quickly inspect runtime stats from external programs.
  • Plot continuously changing values (frame time, latency, memory, counters, custom metrics).
  • Organize data as plot -> series -> points.
  • Visualize without building a full UI in your own app.

Data Flow

flowchart LR
    A[Your Program] -->|VIS_* API calls| B[Shared Memory Buffer\n32 MB]
    B --> C[Visualize Viewer App]
    C --> D[Plot Canvas Renderer]
    D --> E[Line / Scatter / Histogram / Bar Graphs]

Core concept

The integration API is defined in src/visualize/visualize.h.

  • Shared memory transport (VIS_CreateSharedMemory, VIS_Connect)
  • Plot/series selection (VIS_Plot, VIS_Series)
  • Data writes (VIS_Point, VIS_Value, VIS_NamedValue, VIS_NamedPoint)
  • Labels and metadata (VIS_Title, VIS_XLabel, VIS_YLabel, VIS_SeriesName)
  • Synchronization/commands (VIS_Clear, command ring buffer)

Internally, data is written as lightweight nodes into a single mapped buffer and then copied by the viewer into frame-local structures for safe rendering.

Supported graph types

Plot kind Purpose
Line Time-series and trend lines
Scatter Point clouds / sampled observations
Histogram Distribution of values
Bar Named categorical values

Quick start

Before building, open the x64 Visual Studio Command Prompt and run commands from there. This ensures cl.exe (MSVC) is available on your PATH.

1) Build and run the viewer (Windows/MSVC)

From repository root:

build.bat

This produces build/visualize.exe.

2) Send data from your program

Minimal example:

#include "src/visualize/visualize.h"

void send_metrics() {
    VIS_Plot(0);
    VIS_Title("Application Timing");
    VIS_XLabel("Frame");
    VIS_YLabel("Milliseconds");

    VIS_Series(0);
    VIS_SeriesName("Update");
    VIS_Point(1.0, 0.42);

    VIS_Series(1);
    VIS_SeriesName("Render");
    VIS_Point(1.0, 0.31);
}

Notes:

  • Start the viewer first so shared memory exists.
  • API uses a fixed named shared-memory region (VIS_BUFFER_NAME).
  • Buffer size is 32 MB (VIS_BUFFER_SIZE).
Description
Visualize is a real-time graph viewer for instrumenting your programs.
Readme 3.3 MiB
Languages
C 67.2%
C++ 32.7%