# snowdeenn/learn_wgpu architecture

> Architecture diagram of the GitHub repository snowdeenn/learn_wgpu, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-15). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/snowdeenn/learn_wgpu
- Repository: https://github.com/snowdeenn/learn_wgpu

## Overview

Velum is a Rust 2D rendering and scene library for applications. An application builds a scene with typed render data and ordered render passes; the renderer executes those passes against backend resources and targets. The repository also provides particle effects, post-processing, camera/input, text and debug tooling. Relationships among unsampled modules are limited to dependencies named in the source index; the README is empty, so broader capability descriptions are based on the source tree and sampled code.

Main entry points: [`src/scene/setup.rs`](https://github.com/snowdeenn/learn_wgpu/blob/main/src/scene/setup.rs) (Scene setup), [`src/app/mod.rs`](https://github.com/snowdeenn/learn_wgpu/blob/main/src/app/mod.rs) (Windowed app), [`src/scene/render.rs`](https://github.com/snowdeenn/learn_wgpu/blob/main/src/scene/render.rs) (Scene rendering), [`src/scene/resources.rs`](https://github.com/snowdeenn/learn_wgpu/blob/main/src/scene/resources.rs) (Scene resources)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["Scene API"]
  node_scene_api["Scene API and data<br/>[scene.rs]"]
  node_velum["Scene manager<br/>[velum.rs]"]
  node_scene_setup["Scene setup<br/>[setup.rs]"]
  node_scene_render["Scene rendering<br/>[render.rs]"]
  node_scene_resources["Scene resources<br/>[resources.rs]"]
  node_scene_instances["Scene instances<br/>[instance.rs]"]
end

subgraph group_runtime["Application Runtime"]
  node_app["Windowed app<br/>[mod.rs]"]
  node_app_events["Input events<br/>[events.rs]"]
  node_app_update["Frame update<br/>[update.rs]"]
  node_camera["2D camera<br/>[d2.rs]"]
  node_debug["Debug tools<br/>[manager.rs]"]
end

subgraph group_render["Rendering Backend"]
  node_backend_renderer["Frame renderer<br/>[renderer.rs]"]
  node_backend_context["GPU context<br/>[context.rs]"]
  node_backend_pass["Render passes"]
  node_backend_pipeline["Pipelines"]
  node_backend_resources["GPU resources<br/>[buffer.rs]"]
  node_backend_phase["Draw phases<br/>[phase.rs]"]
  node_backend_metrics["Render metrics<br/>[metrics.rs]"]
  node_textures["Texture loading<br/>[loading.rs]"]
  node_text["Text rendering<br/>[draw.rs]"]
end

subgraph group_visual["Effects and Geometry"]
  node_geometry["Meshes and primitives<br/>[mesh.rs]"]
  node_postfx["Post-processing<br/>[blur.rs]"]
  node_composite["Composition<br/>[composite.rs]"]
  node_present["Frame presentation<br/>[present.rs]"]
end

subgraph group_particles["Particle System"]
  node_particle_data["Particle data<br/>[data.rs]"]
  node_particle_effect["Effect simulation<br/>[effect.rs]"]
  node_particle_emitter["Effect emitters<br/>[emitter.rs]"]
  node_particle_modules["Particle modules"]
  node_particle_storage[("Effect registry<br/>[storage.rs]")]
end

node_application(("Embedding application"))

node_application -->|"builds scenes"| node_velum
node_velum -->|"manages scenes"| node_scene_api
node_scene_api -->|"executes passes"| node_backend_pass
node_app -->|"uses renderer"| node_backend_renderer
node_app -->|"uses controller"| node_camera
node_app -->|"uses manager"| node_debug
node_app -->|"declares events"| node_app_events
node_app -->|"declares update"| node_app_update
node_app_events -->|"uses metrics"| node_backend_metrics
node_scene_setup -->|"builds renderer"| node_scene_render
node_scene_setup -->|"registers resources"| node_scene_resources
node_scene_setup -->|"creates blur"| node_postfx
node_scene_setup -->|"creates composition"| node_composite
node_scene_setup -->|"creates presenter"| node_present
node_scene_setup -->|"creates meshes"| node_geometry
node_scene_render -->|"reads resources"| node_scene_resources
node_scene_render -->|"uses scene API"| node_scene_api
node_scene_render -->|"uses renderer"| node_backend_renderer
node_scene_resources -->|"stores instances"| node_scene_instances
node_scene_resources -->|"references meshes"| node_geometry
node_backend_context -->|"owns buffers"| node_backend_resources
node_backend_context -->|"owns texture storage"| node_textures
node_backend_pass -.->|"dispatches operations"| node_backend_pipeline
node_backend_renderer -.->|"executes passes"| node_backend_pass
node_backend_phase -.->|"records draws"| node_backend_metrics
node_particle_storage -->|"updates effects"| node_particle_effect
node_particle_effect -->|"uses particle data"| node_particle_data
node_particle_effect -.->|"runs modules"| node_particle_modules
node_particle_storage -->|"visits render output"| node_particle_modules
node_particle_emitter -.->|"spawns effects"| node_particle_storage

click node_scene_api "https://github.com/snowdeenn/learn_wgpu/blob/main/src/api/scene.rs"
click node_velum "https://github.com/snowdeenn/learn_wgpu/blob/main/src/api/velum.rs"
click node_app "https://github.com/snowdeenn/learn_wgpu/blob/main/src/app/mod.rs"
click node_app_events "https://github.com/snowdeenn/learn_wgpu/blob/main/src/app/events.rs"
click node_app_update "https://github.com/snowdeenn/learn_wgpu/blob/main/src/app/update.rs"
click node_camera "https://github.com/snowdeenn/learn_wgpu/blob/main/src/camera/d2.rs"
click node_debug "https://github.com/snowdeenn/learn_wgpu/blob/main/src/debug/manager.rs"
click node_scene_setup "https://github.com/snowdeenn/learn_wgpu/blob/main/src/scene/setup.rs"
click node_scene_render "https://github.com/snowdeenn/learn_wgpu/blob/main/src/scene/render.rs"
click node_scene_resources "https://github.com/snowdeenn/learn_wgpu/blob/main/src/scene/resources.rs"
click node_scene_instances "https://github.com/snowdeenn/learn_wgpu/blob/main/src/scene/instance.rs"
click node_backend_renderer "https://github.com/snowdeenn/learn_wgpu/blob/main/src/backend/renderer.rs"
click node_backend_context "https://github.com/snowdeenn/learn_wgpu/blob/main/src/backend/context.rs"
click node_backend_pass "https://github.com/snowdeenn/learn_wgpu/tree/main/src/backend/pass"
click node_backend_pipeline "https://github.com/snowdeenn/learn_wgpu/tree/main/src/backend/pipeline"
click node_backend_resources "https://github.com/snowdeenn/learn_wgpu/blob/main/src/backend/buffer.rs"
click node_backend_phase "https://github.com/snowdeenn/learn_wgpu/blob/main/src/backend/phase.rs"
click node_backend_metrics "https://github.com/snowdeenn/learn_wgpu/blob/main/src/backend/metrics.rs"
click node_textures "https://github.com/snowdeenn/learn_wgpu/blob/main/src/backend/texture/loading.rs"
click node_text "https://github.com/snowdeenn/learn_wgpu/blob/main/src/backend/text/draw.rs"
click node_geometry "https://github.com/snowdeenn/learn_wgpu/blob/main/src/geometry/mesh.rs"
click node_postfx "https://github.com/snowdeenn/learn_wgpu/blob/main/src/effects/blur.rs"
click node_composite "https://github.com/snowdeenn/learn_wgpu/blob/main/src/effects/composite.rs"
click node_present "https://github.com/snowdeenn/learn_wgpu/blob/main/src/effects/present.rs"
click node_particle_data "https://github.com/snowdeenn/learn_wgpu/blob/main/src/particle/data.rs"
click node_particle_effect "https://github.com/snowdeenn/learn_wgpu/blob/main/src/particle/effect.rs"
click node_particle_emitter "https://github.com/snowdeenn/learn_wgpu/blob/main/src/particle/emitter.rs"
click node_particle_modules "https://github.com/snowdeenn/learn_wgpu/tree/main/src/particle/modules"
click node_particle_storage "https://github.com/snowdeenn/learn_wgpu/blob/main/src/particle/storage.rs"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_scene_api,node_velum,node_scene_setup,node_scene_render,node_scene_resources,node_scene_instances toneBlue
class node_app,node_app_events,node_app_update,node_camera,node_debug toneAmber
class node_backend_renderer,node_backend_context,node_backend_pass,node_backend_pipeline,node_backend_resources,node_backend_phase,node_backend_metrics,node_textures,node_text toneMint
class node_geometry,node_postfx,node_composite,node_present toneRose
class node_particle_data,node_particle_effect,node_particle_emitter,node_particle_modules,node_particle_storage,node_application toneIndigo
```

## Components

### Scene API

- [Scene API and data](https://github.com/snowdeenn/learn_wgpu/blob/main/src/api/scene.rs): `src/api/scene.rs`
- [Scene manager](https://github.com/snowdeenn/learn_wgpu/blob/main/src/api/velum.rs): `src/api/velum.rs`
- [Scene setup](https://github.com/snowdeenn/learn_wgpu/blob/main/src/scene/setup.rs): `src/scene/setup.rs`
- [Scene rendering](https://github.com/snowdeenn/learn_wgpu/blob/main/src/scene/render.rs): `src/scene/render.rs`
- [Scene resources](https://github.com/snowdeenn/learn_wgpu/blob/main/src/scene/resources.rs): `src/scene/resources.rs`
- [Scene instances](https://github.com/snowdeenn/learn_wgpu/blob/main/src/scene/instance.rs): `src/scene/instance.rs`

### Application Runtime

- [Windowed app](https://github.com/snowdeenn/learn_wgpu/blob/main/src/app/mod.rs): `src/app/mod.rs`
- [Input events](https://github.com/snowdeenn/learn_wgpu/blob/main/src/app/events.rs): `src/app/events.rs`
- [Frame update](https://github.com/snowdeenn/learn_wgpu/blob/main/src/app/update.rs): `src/app/update.rs`
- [2D camera](https://github.com/snowdeenn/learn_wgpu/blob/main/src/camera/d2.rs): `src/camera/d2.rs`
- [Debug tools](https://github.com/snowdeenn/learn_wgpu/blob/main/src/debug/manager.rs): `src/debug/manager.rs`

### Rendering Backend

- [Frame renderer](https://github.com/snowdeenn/learn_wgpu/blob/main/src/backend/renderer.rs): `src/backend/renderer.rs`
- [GPU context](https://github.com/snowdeenn/learn_wgpu/blob/main/src/backend/context.rs): `src/backend/context.rs`
- [Render passes](https://github.com/snowdeenn/learn_wgpu/tree/main/src/backend/pass): `src/backend/pass`
- [Pipelines](https://github.com/snowdeenn/learn_wgpu/tree/main/src/backend/pipeline): `src/backend/pipeline`
- [GPU resources](https://github.com/snowdeenn/learn_wgpu/blob/main/src/backend/buffer.rs): `src/backend/buffer.rs`
- [Draw phases](https://github.com/snowdeenn/learn_wgpu/blob/main/src/backend/phase.rs): `src/backend/phase.rs`
- [Render metrics](https://github.com/snowdeenn/learn_wgpu/blob/main/src/backend/metrics.rs): `src/backend/metrics.rs`
- [Texture loading](https://github.com/snowdeenn/learn_wgpu/blob/main/src/backend/texture/loading.rs): `src/backend/texture/loading.rs`
- [Text rendering](https://github.com/snowdeenn/learn_wgpu/blob/main/src/backend/text/draw.rs): `src/backend/text/draw.rs`

### Effects and Geometry

- [Meshes and primitives](https://github.com/snowdeenn/learn_wgpu/blob/main/src/geometry/mesh.rs): `src/geometry/mesh.rs`
- [Post-processing](https://github.com/snowdeenn/learn_wgpu/blob/main/src/effects/blur.rs): `src/effects/blur.rs`
- [Composition](https://github.com/snowdeenn/learn_wgpu/blob/main/src/effects/composite.rs): `src/effects/composite.rs`
- [Frame presentation](https://github.com/snowdeenn/learn_wgpu/blob/main/src/effects/present.rs): `src/effects/present.rs`

### Particle System

- [Particle data](https://github.com/snowdeenn/learn_wgpu/blob/main/src/particle/data.rs): `src/particle/data.rs`
- [Effect simulation](https://github.com/snowdeenn/learn_wgpu/blob/main/src/particle/effect.rs): `src/particle/effect.rs`
- [Effect emitters](https://github.com/snowdeenn/learn_wgpu/blob/main/src/particle/emitter.rs): `src/particle/emitter.rs`
- [Particle modules](https://github.com/snowdeenn/learn_wgpu/tree/main/src/particle/modules): `src/particle/modules`
- [Effect registry](https://github.com/snowdeenn/learn_wgpu/blob/main/src/particle/storage.rs): `src/particle/storage.rs`

### Other components

- **Embedding application**

## Connections

- Embedding application → Scene manager: builds scenes
- Scene manager → Scene API and data: manages scenes (evidence: `src/api/velum.rs`)
- Scene API and data → Render passes: executes passes (evidence: `src/api/scene.rs`)
- Windowed app → Frame renderer: uses renderer (evidence: `src/app/mod.rs`)
- Windowed app → 2D camera: uses controller (evidence: `src/app/mod.rs`)
- Windowed app → Debug tools: uses manager (evidence: `src/app/mod.rs`)
- Windowed app → Input events: declares events (evidence: `src/app/mod.rs`)
- Windowed app → Frame update: declares update (evidence: `src/app/mod.rs`)
- Input events → Render metrics: uses metrics (evidence: `src/app/events.rs`)
- Scene setup → Scene rendering: builds renderer (evidence: `src/scene/setup.rs`)
- Scene setup → Scene resources: registers resources (evidence: `src/scene/setup.rs`)
- Scene setup → Post-processing: creates blur (evidence: `src/scene/setup.rs`)
- Scene setup → Composition: creates composition (evidence: `src/scene/setup.rs`)
- Scene setup → Frame presentation: creates presenter (evidence: `src/scene/setup.rs`)
- Scene setup → Meshes and primitives: creates meshes (evidence: `src/scene/setup.rs`)
- Scene rendering → Scene resources: reads resources (evidence: `src/scene/render.rs`)
- Scene rendering → Scene API and data: uses scene API (evidence: `src/scene/render.rs`)
- Scene rendering → Frame renderer: uses renderer (evidence: `src/scene/render.rs`)
- Scene resources → Scene instances: stores instances (evidence: `src/scene/resources.rs`)
- Scene resources → Meshes and primitives: references meshes (evidence: `src/scene/resources.rs`)
- GPU context → GPU resources: owns buffers (evidence: `src/backend/context.rs`)
- GPU context → Texture loading: owns texture storage (evidence: `src/backend/context.rs`)
- Render passes → Pipelines: dispatches operations
- Frame renderer → Render passes: executes passes
- Draw phases → Render metrics: records draws
- Effect registry → Effect simulation: updates effects (evidence: `src/particle/storage.rs`)
- Effect simulation → Particle data: uses particle data
- Effect simulation → Particle modules: runs modules
- Effect registry → Particle modules: visits render output (evidence: `src/particle/storage.rs`)
- Effect emitters → Effect registry: spawns effects
