Dear ImGui over WebSockets
This is a small library that allows to stream a Dear ImGui scene to multiple WebSocket clients at once. This is achieved by sending Dear ImGui's DrawData structure which is then rendered in the browser using WebGL. To reduce the amount of network traffic, we send only the diffs between sequential frames (for more info - see #1).
These are sample applications using imgui-ws, running on a Linode 2GB instance:
Example | URL | Description |
---|---|---|
demo-null | http://imgui-ws.ggerganov.com:5001/ | Dear ImGui's demo app |
basic-null | http://imgui-ws.ggerganov.com:5002/ | Basic read-only data visualization |
There are a few tools that help with the development and the optimization of the ImDrawData compression:
-
Record the ImDrawData for all rendered frames in a Dear ImGui session
./bin/record-sdl2 session.imdd
-
Replay a session recorded with the record-sdl2 tool
./bin/replay-sdl2 session.imdd
-
Run the available ImDrawData compression algorithms on various pre-recorded Dear ImGui sessions. Reports compression ratio, average required bandwidth and cpu utilization:
./bin/compressor-benchmark session0.imdd [session1.imdd] [session2.imdd] [...]
# build
git clone https://github.com/ggerganov/imgui-ws --recursive
cd imgui-ws && mkdir build && cd build
cmake ..
make
# running
./bin/demo-null 5000
Open some browsers and point them to http://localhost:5000/
- uWebSockets
- SDL2 - optional, used by some of the examples and tools
- This project is heavily inspired by https://github.com/JordiRos/remoteimgui
- Most of the JS code is taken from https://github.com/flyover/imgui-js