vidya/AGENTS.md
2026-10-24 21:17:06 +02:00

42 lines
3.6 KiB
Markdown

# Workspace guide
## Workspace
- Rust workspace uses the nightly toolchain (`rust-toolchain`), edition 2024, resolver 2.
- Members: `crates/renderer`, `crates/renderer/renderer_macros`, `crates/renderer_device`, `crates/renderer_resources`, `crates/window`, `crates/game`, `crates/text`, and `crates/bevy_vulkan_render`.
- Dependency direction for Vulkan rendering: `bevy_vulkan_render` → `renderer` → `renderer_resources` → `renderer_device`. `renderer_macros` supplies `DeviceRef` derives to `renderer` and is a dev-dependency for `renderer_device` tests.
- `renderer` re-exports device, instance, queue, and sync modules and many root device types. Prefer its paths for downstream rendering code; its resource-module aliases remain crate-private.
- `crates/renderer/renderer_macros` is the proc-macro crate used by `renderer` for `DeviceRef` derives.
- `crates/renderer_device` owns Vulkan instance/device setup, queues, sync primitives, and handle lifetimes.
- `crates/renderer_resources` owns public buffer, image, view, descriptor, sampler, shader-module, and pipeline resource APIs on `renderer_device`.
- `crates/renderer` owns rendering orchestration, commands, swapchains, and render graph APIs; resource module aliases are internal, not `renderer` public modules.
- `crates/bevy_vulkan_render` integrates the renderer with Bevy. `crates/window`, `crates/game`, and `crates/text` are separate workspace crates.
- The workspace root package is `vidya`; it also contains examples and depends on `bevy_vulkan_render`.
- `renderer_resources` depends on `renderer_device`, not `renderer`; do not introduce a dependency cycle.
- `renderer` uses `renderer_device` for device/instance ownership and accesses resource modules through crate-private aliases.
- `renderer_macros` is nested under the renderer package directory but is a distinct workspace package.
## Layout
- Workspace and shared dependency versions: root `Cargo.toml`.
- Per-crate manifests live beside crate source under `crates/`.
- Rendering shaders and assets are under `crates/renderer/shaders` and `assets/`.
- Root-level demos and examples are under `examples/`; add shared dependencies under `[workspace.dependencies]` where appropriate.
- The workspace uses Rust 2024 syntax; `renderer` and `renderer_device` use nightly features. `renderer_resources` has no crate-level nightly feature attributes.
## Conventions
- Keep changes local to the owning crate; preserve the device/rendering layer boundary.
- Follow existing Rust style and use the workspace dependency declarations in the root manifest when applicable.
- Keep the device/resource/rendering dependency boundaries described above; use `renderer`'s re-exported API in Bevy integration where possible.
- Do not commit changes; the user owns commits.
- Read the crate-level instructions before changing rendering/device/resource boundaries:
- [`crates/renderer_device/AGENTS.md`](crates/renderer_device/AGENTS.md)
- [`crates/renderer_resources/AGENTS.md`](crates/renderer_resources/AGENTS.md)
- [`crates/renderer/AGENTS.md`](crates/renderer/AGENTS.md)
## Verification
- `cargo check --workspace` checks all workspace crates.
- `cargo test -p renderer_device` runs the device-layer tests.
- Rendering code uses nightly features; use the pinned workspace toolchain for all Cargo commands.
- Run Cargo commands from the workspace root to use the pinned toolchain and shared workspace configuration.
- Use crate-scoped `cargo check -p <crate>` or `cargo test -p <crate>` for focused checks, then workspace check for cross-crate API changes.
- Review `git status` and `git diff` before reporting changes; preserve unrelated user modifications.