You've already forked flecs_tests
64 lines
2.3 KiB
Markdown
64 lines
2.3 KiB
Markdown
# Cartograph
|
|
|
|
A browser-based world map creation tool inspired by Wonderdraft and Inkarnate. Uses line-strip vector shapes with procedural geometry.
|
|
|
|
## Features
|
|
|
|
- **Shapes** — procedural circles and stars with per-instance transforms (position, scale, rotation)
|
|
- **Shape editing** — select, move, rotate, scale individual shapes; rect-select multiple shapes
|
|
- **Undo/redo** — property-level history stack (position, scale, rotation, color) with edit session capture and batch operations
|
|
- **Spatial index** — hash grid for fast hit testing and rect-selection queries on large shape counts
|
|
- **Viewport** — zoom and pan with screen↔world coordinate transforms
|
|
|
|
## Tech stack
|
|
|
|
| Layer | Library |
|
|
|---|---|
|
|
| Language | C (C99) |
|
|
| Compiler | [Emscripten](https://emscripten.org/) (emcc) → WebAssembly |
|
|
| Graphics | [Sokol](https://github.com/floooh/sokol) with WebGPU backend |
|
|
| UI | [Dear ImGui](https://github.com/ocornut/imgui) via [cimgui](https://github.com/cimgui/cimgui) |
|
|
| Math | [cglm](https://github.com/recp/cglm) |
|
|
| Shaders | WGSL (compiled to C headers via `xxd`) |
|
|
|
|
## Build
|
|
|
|
```sh
|
|
# Install dependencies
|
|
./fetch_libs.sh
|
|
|
|
# Release build
|
|
make
|
|
|
|
# Debug build
|
|
make debug
|
|
```
|
|
|
|
Output is `app.html`, served by Emscripten's built-in web server or any static server.
|
|
|
|
## Project structure
|
|
|
|
```
|
|
src/
|
|
main.c Entry point, sokol init, render loop, input handling, UI panels, debug stats
|
|
api.h Central include — all library headers, ALLOC/FREE macros
|
|
camera.h Viewport state, zoom/pan, MVP matrix, screen↔world transforms
|
|
render.h Shape pipeline init/shutdown, per-shape draw calls
|
|
shape.h Shape geometry types, procedural generation, hit testing, buffer management
|
|
spatial.h Spatial hash grid for accelerated hit tests and rect-select queries
|
|
history.h Undo/redo stack with property-level tracking and batch operations
|
|
util.h Vector (dynamic array) and memory pool data structures
|
|
rand.h Xorshift32 PRNG utilities
|
|
shaders/ WGSL shader sources (shape, sprite)
|
|
generated/ xxd-generated C headers from shaders
|
|
lib/
|
|
sokol/ Sokol single-file headers (gfx, app, glue, log)
|
|
imgui/ Dear ImGui + cimgui
|
|
cglm/ C linear math library
|
|
util/ Sokol utility headers (memtrack, imgui integration)
|
|
```
|
|
|
|
## License
|
|
|
|
MIT
|