Files
CFDManager/rust/Cargo.toml
T
NotBigGhostandClaude Opus 5 f5c9e61589 Порт редактора SimVulcan на Rust
Та же программа на ash + winit + egui: орбитальная камера, три плоскости сетки,
загрузка .obj, три режима отображения, единый проход динамического рендеринга с
глубинным вложением и submit через synchronization2. Шейдеры общие с C++-версией —
build.rs компилирует их из shaders/ и вшивает SPIR-V в бинарь.

Пять крейтов повторяют карту целей CMake, но инвариант «весь Vulkan в одном месте»
теперь проверяет компилятор: у simv-mesh и simv-editor нет ash в зависимостях.

Расхождения, вынужденные языком, а не вкусом:
 * App переехал в исполняемый крейт — в C++ граф целей цикличен (core владеет vk,
   vk принимает core::Window&), и держится это лишь на том, что simv_vk видит
   заголовки core, не линкуя цель; Cargo такой цикл отвергает;
 * состояние сцены возвращается из замыкания интерфейса, а не ставится сеттерами:
   замыкание вызывается из метода рендерера, трогать рендерер оттуда нельзя;
 * выгрузка меша на видеокарту уехала из середины записи кадра, где C++-версия
   зовёт vkDeviceWaitIdle уже после захвата образа цепочки показа.

Vulkan-контекст и цепочка показа написаны руками: замены vk-bootstrap в экосистеме
Rust нет. Обёртки Buffer и Image, лежащие в C++-версии без применения, здесь
задействованы всеми потребителями.

13 тестов, из них три перенесены из Catch2 дословно. cargo clippy -D warnings чист,
слой валидации молчит.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-30 20:58:19 +03:00

43 lines
1.8 KiB
TOML

# Порт редактора SimVulcan на Rust. Пять крейтов повторяют карту целей CMake из
# корня репозитория (simv_core / simv_vk / simv_mesh / simv_editor + исполняемый файл),
# и это не косметика: главный инвариант проекта — «весь Vulkan живёт в одном месте» —
# здесь проверяется компилятором. У simv-mesh и simv-editor просто нет ash в
# зависимостях, так что нарушить границу нельзя даже случайно.
[workspace]
resolver = "2"
members = ["crates/*"]
[workspace.package]
version = "0.1.0"
edition = "2021"
rust-version = "1.82"
license = "MIT"
# Версии закреплены здесь, крейты ссылаются через `workspace = true`.
[workspace.dependencies]
simv-core = { path = "crates/simv-core" }
simv-mesh = { path = "crates/simv-mesh" }
simv-vk = { path = "crates/simv-vk" }
simv-editor = { path = "crates/simv-editor" }
ash = "0.38"
ash-window = "0.13"
raw-window-handle = "0.6"
winit = "0.30"
gpu-allocator = { version = "0.28", default-features = false, features = ["vulkan"] }
egui = "0.36"
egui-winit = { version = "0.36", default-features = false, features = ["wayland", "x11"] }
egui-ash-renderer = { version = "0.13", features = ["gpu-allocator"] }
glam = { version = "0.33", features = ["bytemuck"] }
tobj = "4"
log = "0.4"
chrono = { version = "0.4", default-features = false, features = ["clock", "std"] }
thiserror = "2"
anyhow = "1"
bytemuck = { version = "1", features = ["derive"] }
[profile.release]
opt-level = 3
lto = "thin"
codegen-units = 1