Files
NotBigGhostandClaude Opus 5 d7881496b0 Сверка документации с кодом: исправлены расхождения
Сплошная проверка документов против дерева. Код не менялся.

docs/rust_vs_cpp.md — числа, снятые с чужого каталога сборки:
- «775 МБ исходников зависимостей» и «10 пакетов в графе C++» получены
  на build/, сконфигурированном из другого дерева (его _deps содержит
  262 МБ nlohmann_json, который проект не объявляет). На деле девять
  объявленных репозиториев дают ~400 МБ исходников;
- пакетов в графе Rust 82, а не 76 (cargo tree по текущему Cargo.lock);
- итог по строкам 2976/494, а не 2962/492: строка «меш» устарела на 17
  строк игнорируемого диагностического теста, тесты в модулях — 176;
- «перевес почти весь в Vulkan-слое» — на деле 346 из 542 (64 %), из них
  305 на Context и Swapchain; остальное приходится на меш, редактор и
  приложение;
- «ни один замер не даёт разницы в порядок величины» неверно:
  инкрементальная release — 52.3 против 4.4 с, это 11.9x;
- граней с пятью и более вершинами в plane.obj 119, а не 121;
- из Catch2 перенесены все три случая, и добавлено ещё два, а не
  «три перенесены дословно»;
- деструктор Renderer::Impl — 22 строки, а не тридцать;
- путевых зависимостей у порта две: assets/meshes с откатом на текущий
  каталог и pipeline_cache.bin рядом с бинарём;
- граф целей CMake ацикличен, цикл существует на уровне исходников —
  именно поэтому CMake и молчит.

rust/README.md:
- объявленный rust-version = "1.82" недостижим: залоченные egui,
  egui-winit и epaint 0.36.1 требуют 1.95;
- перечни зависимостей крейтов были неполны, приведены целиком;
- build.rs читает ../../../shaders, а не ../../shaders;
- тесты не «чистая математика»: тесты загрузчика читают файлы из
  assets/meshes и требуют клон репозитория;
- assets/ порту никто не копирует, он находит корневую копию сам;
- те же поправки про цикл в CMake и про момент ожидания простоя.

README.md:
- панель называется Mesh, а не «Mesh load»;
- пресета clang-cl не существует, компилятор пресеты не фиксируют;
- версии Vulkan SDK и компиляторов сборкой не проверяются;
- Buffer и Image перечислены среди рабочих модулей vk/, хотя ими не
  пользуется никто.

docs/theory/solver_2x_sdf/README.md:
- предлагался несуществующий переключатель cfg.collision="bgk" и реестр
  операторов get; тот же файл двумя разделами ниже говорит, что оператор
  зафиксирован.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-16 14:11:06 +03:00

70 lines
2.2 KiB
Markdown

# SimVulcan
A minimal Vulkan 1.3 / C++20 **3D model editor**: an orbit camera over three
reference grid planes through the origin, with `.obj` model loading and display.
## Features
* Orbit camera — drag to rotate around the centre, wheel to zoom, and Front / Top
/ Side buttons to align the view to the principal planes.
* A 3D editor space: three grid planes (XY, XZ, YZ) and coloured X/Y/Z axes meeting
at the origin.
* `.obj` loading with three display modes — solid (flat-shaded), wireframe, and
solid + wireframe overlay.
* ImGui interface — two windows, titled `Viewport` and `Mesh`.
All Vulkan code is isolated in `src/vk/`; the rest of the app is Vulkan-free.
## Targets
* Windows x64 (MSVC)
* Linux x64 (gcc / clang)
* macOS arm64 (Apple Silicon, via MoltenVK)
The presets do not pin a compiler — each inherits whatever the environment provides.
## Prerequisites
* Vulkan SDK 1.3.290+ (`https://vulkan.lunarg.com/`)
* CMake 3.26+
* Ninja
* C++20 compiler (MSVC 19.36+, gcc 11+, clang 14+)
Only CMake 3.26 and C++20 are enforced by the build. `find_package(Vulkan)` carries no
version argument, and the compiler minimums above are recommendations, not checks — the
de-facto SDK floor comes from the pinned volk and vk-bootstrap 1.3.295.
## Build
```sh
cmake --preset windows-msvc-release
cmake --build --preset windows-msvc-release
```
Run from the executable's own directory (`build/<preset>/src/app/`) so it finds
the `spirv/` and `assets/` trees copied next to it.
## Tests
```sh
cmake --build --preset windows-msvc-debug --target simv_tests
ctest --preset windows-msvc-debug
```
## Layout
```
src/
core/ Logger, Window, App (orchestration, Vulkan-free)
vk/ All Vulkan: Context, Swapchain, Shader, GpuMesh,
Renderer (frame loop + depth + ImGui), MeshRenderer, GridRenderer
(Buffer and Image are also built here but used by nobody — the
renderers call VMA directly)
mesh/ CPU mesh: tinyobjloader + welding (no Vulkan)
editor/ Camera, mouse input, EditorUI + MeshLoadPanel (ImGui, no Vulkan)
app/ main.cpp
shaders/
editor/ mesh + grid vertex/fragment shaders (GLSL → SPIR-V at build time)
tests/ Catch2 unit tests (mesh math)
```