# 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//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) ```