Та же программа на 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>
63 lines
3.1 KiB
Plaintext
63 lines
3.1 KiB
Plaintext
# ---------------------------------------------------------------------------
|
|
# Сборка
|
|
# ---------------------------------------------------------------------------
|
|
# Каталог пресетов CMake целиком: объектники, SPIR-V, скопированные assets,
|
|
# и _deps — клоны зависимостей через FetchContent (только они ~775 МБ).
|
|
/build/
|
|
/out/
|
|
CMakeUserPresets.json # локальные пресеты разработчика, не общие
|
|
compile_commands.json # генерится (CMAKE_EXPORT_COMPILE_COMMANDS), часто симлинк в корень
|
|
|
|
# Зависимости, если их когда-нибудь начнут класть вручную (сейчас каталог пуст,
|
|
# всё тянет FetchContent). Убрать строку, если вендорить их в репозиторий.
|
|
/extern/*
|
|
!/extern/.gitkeep
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Артефакты выполнения приложения
|
|
# ---------------------------------------------------------------------------
|
|
# SimVulcan пишет их в текущий каталог при запуске (обычно внутри build/,
|
|
# но при запуске из другого места окажутся здесь).
|
|
imgui.ini
|
|
pipeline_cache.bin
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Python (docs/theory — исследовательский код)
|
|
# ---------------------------------------------------------------------------
|
|
__pycache__/
|
|
*.py[cod]
|
|
.ipynb_checkpoints/
|
|
.venv/
|
|
venv/
|
|
.pytest_cache/
|
|
|
|
# Числовые сводки демо-прогонов: генерятся скриптами demos_gpu/*.py на GPU-сервере
|
|
# (ноутбук цитирует их значения в markdown). Сами прогоны воспроизводимы.
|
|
docs/theory/demos_gpu/out/
|
|
docs/theory/solver_2x_sdf/out/
|
|
|
|
# ВАЖНО: docs/theory/figures/ и docs/theory/anim/ НЕ игнорируются намеренно —
|
|
# ноутбук kbc_lbm.ipynb их встраивает, и без них он нечитаем на свежем клоне
|
|
# (перегенерация требует GPU-сервера). См. заметку о них в README ветки research.
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Rust (rust/ — порт редактора)
|
|
# ---------------------------------------------------------------------------
|
|
# Каталог сборки cargo: объектники, зависимости, инкрементальный кэш.
|
|
target/
|
|
# Cargo.lock для приложения коммитят (воспроизводимость сборки) — он НЕ игнорируется.
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Редакторы и ОС
|
|
# ---------------------------------------------------------------------------
|
|
.vs/
|
|
.vscode/
|
|
.idea/
|
|
*.user
|
|
*.suo
|
|
*.swp
|
|
*~
|
|
.DS_Store
|
|
Thumbs.db
|
|
desktop.ini
|