# Oxide Engine Documentation This directory is the canonical, in-depth documentation for the Oxide engine. The top-level [`README.md`](../README.md) is a short overview; everything detailed — usage guides, API references, and explanations of how the engine works internally — lives here and grows with the engine at every stage. ## How this documentation is organized | Document | What it covers | |----------|----------------| | [getting-started.md](getting-started.md) | Installing the toolchain, building, running examples, running tests and benchmarks | | [architecture.md](architecture.md) | Workspace layout, crate responsibilities, design philosophy, staged development model | | [conventions.md](conventions.md) | Coordinate system, handedness, units, color space, and other cross-cutting conventions | | [development.md](development.md) | Branch workflow (`dev`/`main`), testing protocol, documentation policy, how to add a stage | | [math.md](math.md) | Full reference for the `oxide_engine::math` module (Stage 1) | | [windowing.md](windowing.md) | Window creation, the `App` trait and event loop, raw input events (Stage 2) | | [render-context.md](render-context.md) | GPU acquisition, surface configuration, the clear-color frame loop (Stage 2) | | [scene.md](scene.md) | Scene graph, entities, the transform hierarchy, and serialization (Stage 3) | | [rendering.md](rendering.md) | Meshes, materials, camera, and the forward renderer (Stage 4) | | [layers.md](layers.md) | Layers, groups & tags: single-valued `Layer` + multi-valued `Tags`/`GroupRegistry`, the shared `LayerMask` filter primitive (Stage 5) | | [reflection.md](reflection.md) | Reflection / type registry: generic name-keyed component access for dual-editability (Stage 5) | | [prefabs.md](prefabs.md) | Prefabs: data-driven named spawn templates (component specs applied via the registry) (Stage 8.5) | | [assets.md](assets.md) | Asset server & handles: ref-counted loading, dedup, loaders, background load, reload (Stage 5) | | [modules.md](modules.md) | App, modules & scheduling: composing the engine, system phases, fixed timestep, enable/disable/remove (Stage 5) | | [render-pipeline.md](render-pipeline.md) | Data-driven render pass pipeline: composable passes, scalable fidelity, camera layer visibility (Stage 5) | | [projects.md](projects.md) | Project system: project file, folder layout, create/open/save, recent projects (Stage 6) | | [settings.md](settings.md) | Settings & preferences framework: typed sections, export/import, per-module/per-project settings (Stage 6) | | [file-watching.md](file-watching.md) | File-watcher foundation: debounced/deduplicated change events; asset live-reload wiring (Stage 6) | | [editor-extensions.md](editor-extensions.md) | Module → editor extension API: how a module contributes menus, panels, tools, inspectors, settings pages (Stage 6) | | [editor-shell.md](editor-shell.md) | Editor docking shell: menu bar, dockable panels, status bar, Preferences window, command stack + file watcher wiring (Stage 6) | | [input.md](input.md) | Input system: per-frame `InputState` with edge detection, named action mapping (`ActionMap`/`Binding`) with defaults + remapping + RON persistence, 1D/2D directional axes (Stage 7) | | [ui.md](ui.md) | In-game UI: widget tree, layout (stack/grid/anchor), DPI-aware sizing, per-widget visual styles + named-style themes, RON dual-edit, ab_glyph-backed text shaping + R8 glyph atlas, screen-space + world-space `UiOverlayPass`, hit-test + hover/focus/press `Router`, immediate-mode event queries + typed `WidgetValue`s (Stage 8 — pieces 1–6, GUI tail coming) | | [play-mode.md](play-mode.md) | Editor play mode: `PlayState`, registry-aware `SceneSnapshot` snapshot/restore, the `tick_for` decision + `App::step`, the scene-swap runner, toolbar/shortcuts/viewport tint (Stage 8.7) | | [physics.md](physics.md) | Physics module (`oxide-physics`, rapier3d): `RigidBody`/`Collider` components, `LayerMask`-filtered collision, the ECS-as-source-of-truth model, module wiring (Stage 9) | | [scripting.md](scripting.md) | Scripting module (`oxide-script`, rhai): the `Script` component, `ScriptAsset` + `.rhai` loader, the sandboxed `ScriptEngine` wrapper, module wiring; ECS-as-source-of-truth + live-reload model (Stage 10) | ## Documentation status by stage Documentation is written alongside the code. A stage is not considered done until its docs exist here. | Stage | Subject | Docs | |-------|---------|------| | 0 | Project foundation | [architecture.md](architecture.md), [getting-started.md](getting-started.md) | | 1 | Math & core primitives | [math.md](math.md) | | 2 | Window & render context | [windowing.md](windowing.md), [render-context.md](render-context.md) | | 3 | Scene graph & entity system | [scene.md](scene.md) | | 4 | Basic 3D rendering | [rendering.md](rendering.md) | | 5 | Engine core framework | [modules.md](modules.md), [layers.md](layers.md), [reflection.md](reflection.md), [assets.md](assets.md), [render-pipeline.md](render-pipeline.md) | | 6 | Editor framework & project system | [projects.md](projects.md), [settings.md](settings.md), [file-watching.md](file-watching.md), [editor-extensions.md](editor-extensions.md), [editor-shell.md](editor-shell.md) | | 7 | Input system | [input.md](input.md) | | 8 | Comprehensive UI system (in progress) | [ui.md](ui.md) | | 8.7 | Editor play mode | [play-mode.md](play-mode.md) | | 9 | Physics integration (in progress) | [physics.md](physics.md) | | 10 | Scripting, live reload & editor terminal (in progress) | [scripting.md](scripting.md) | | 11+ | — | _added as each stage lands_ | ## Conventions for these files - One topic per file; keep files focused and link between them rather than duplicating content. - Every public type or system gets: a one-line summary, when to use it, and at least one runnable code snippet. - Code snippets are written so they would compile against the current API. When the API changes, update the snippet in the same change. - Prefer explaining the *why* (design intent, trade-offs) over restating the *what* (which the rustdoc comments already cover).