Files
CFDManager/rust/crates/simv-vk/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

27 lines
867 B
TOML

# Аналог цели simv_vk: единственный крейт, которому позволено видеть ash.
# build.rs компилирует общие с C++-версией шейдеры из ../../shaders в SPIR-V.
[package]
name = "simv-vk"
version.workspace = true
edition.workspace = true
rust-version.workspace = true
license.workspace = true
description = "Весь Vulkan: контекст, swapchain, конвейеры, кадр"
build = "build.rs"
[dependencies]
simv-core.workspace = true
simv-mesh.workspace = true
ash.workspace = true
ash-window.workspace = true
raw-window-handle.workspace = true
gpu-allocator.workspace = true
egui.workspace = true
egui-winit.workspace = true
egui-ash-renderer.workspace = true
winit.workspace = true
glam.workspace = true
bytemuck.workspace = true
log.workspace = true
thiserror.workspace = true