Начальный коммит: Vulkan-редактор SimVulcan + исследование KBC-LBM
Состояние на момент заведения репозитория. C++ приложение (src/, shaders/, tests/) — минимальный редактор 3D-моделей на Vulkan 1.3: орбитальная камера, три опорные сетки через начало координат, загрузка .obj с режимами отображения. Весь Vulkan изолирован в src/vk/. Исследование (docs/) — оригинальные статьи по KBC (docs/origins) и Python-решатель D2Q9 KBC-N1 с AMR 2x и SDF+Bouzidi (docs/theory). В решателе перед коммитом исправлены дефекты, найденные сверкой с первоисточниками: относительный порог знаменателя энтропийного стабилизатора (абсолютный вырождал KBC в LBGK на 77-99% узлов), заворот вход/выход в углах домена, диагностика средней плотности по фиктивным узлам тела, зашитый refine=2. Подробности — docs/theory/solver_2x_sdf/README.md. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
+139
@@ -0,0 +1,139 @@
|
||||
cmake_minimum_required(VERSION 3.26)
|
||||
|
||||
project(SimVulcan
|
||||
VERSION 0.1.0
|
||||
DESCRIPTION "Vulkan 3D editor: orbit camera, reference grid, OBJ model viewer"
|
||||
LANGUAGES CXX C
|
||||
)
|
||||
|
||||
set(CMAKE_CXX_STANDARD 20)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
||||
|
||||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
|
||||
|
||||
include(CompilerWarnings)
|
||||
include(Sanitizers)
|
||||
include(VulkanSetup)
|
||||
include(ShaderCompile)
|
||||
include(FetchContent)
|
||||
|
||||
# ----------------------------------------------------------------------------
|
||||
# External dependencies (FetchContent — pinned commits)
|
||||
# ----------------------------------------------------------------------------
|
||||
set(FETCHCONTENT_QUIET OFF)
|
||||
set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE)
|
||||
|
||||
# GLFW
|
||||
set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
|
||||
set(GLFW_BUILD_TESTS OFF CACHE BOOL "" FORCE)
|
||||
set(GLFW_BUILD_DOCS OFF CACHE BOOL "" FORCE)
|
||||
FetchContent_Declare(glfw
|
||||
GIT_REPOSITORY https://github.com/glfw/glfw.git
|
||||
GIT_TAG 3.4
|
||||
)
|
||||
|
||||
# GLM
|
||||
FetchContent_Declare(glm
|
||||
GIT_REPOSITORY https://github.com/g-truc/glm.git
|
||||
GIT_TAG 1.0.1
|
||||
)
|
||||
|
||||
# volk (lazy Vulkan loader)
|
||||
FetchContent_Declare(volk
|
||||
GIT_REPOSITORY https://github.com/zeux/volk.git
|
||||
GIT_TAG 1.3.295
|
||||
)
|
||||
|
||||
# vk-bootstrap
|
||||
FetchContent_Declare(vk-bootstrap
|
||||
GIT_REPOSITORY https://github.com/charles-lunarg/vk-bootstrap.git
|
||||
GIT_TAG v1.3.295
|
||||
)
|
||||
|
||||
# Vulkan Memory Allocator
|
||||
FetchContent_Declare(VulkanMemoryAllocator
|
||||
GIT_REPOSITORY https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator.git
|
||||
GIT_TAG v3.1.0
|
||||
)
|
||||
|
||||
# Dear ImGui (we wrap it in a small CMake target ourselves below).
|
||||
FetchContent_Declare(imgui
|
||||
GIT_REPOSITORY https://github.com/ocornut/imgui.git
|
||||
GIT_TAG v1.91.5-docking
|
||||
)
|
||||
|
||||
# spdlog
|
||||
set(SPDLOG_BUILD_SHARED OFF CACHE BOOL "" FORCE)
|
||||
set(SPDLOG_FMT_EXTERNAL OFF CACHE BOOL "" FORCE)
|
||||
FetchContent_Declare(spdlog
|
||||
GIT_REPOSITORY https://github.com/gabime/spdlog.git
|
||||
GIT_TAG v1.14.1
|
||||
)
|
||||
|
||||
# tinyobjloader (header-only)
|
||||
FetchContent_Declare(tinyobjloader
|
||||
GIT_REPOSITORY https://github.com/tinyobjloader/tinyobjloader.git
|
||||
GIT_TAG v2.0.0rc13
|
||||
)
|
||||
|
||||
# Catch2
|
||||
FetchContent_Declare(Catch2
|
||||
GIT_REPOSITORY https://github.com/catchorg/Catch2.git
|
||||
GIT_TAG v3.7.1
|
||||
)
|
||||
|
||||
FetchContent_MakeAvailable(
|
||||
glfw glm volk vk-bootstrap VulkanMemoryAllocator
|
||||
imgui spdlog tinyobjloader Catch2
|
||||
)
|
||||
|
||||
# ----------------------------------------------------------------------------
|
||||
# ImGui static library (needs explicit target — official repo has none)
|
||||
# ----------------------------------------------------------------------------
|
||||
add_library(imgui STATIC
|
||||
${imgui_SOURCE_DIR}/imgui.cpp
|
||||
${imgui_SOURCE_DIR}/imgui_demo.cpp
|
||||
${imgui_SOURCE_DIR}/imgui_draw.cpp
|
||||
${imgui_SOURCE_DIR}/imgui_tables.cpp
|
||||
${imgui_SOURCE_DIR}/imgui_widgets.cpp
|
||||
${imgui_SOURCE_DIR}/backends/imgui_impl_glfw.cpp
|
||||
${imgui_SOURCE_DIR}/backends/imgui_impl_vulkan.cpp
|
||||
)
|
||||
target_include_directories(imgui PUBLIC
|
||||
${imgui_SOURCE_DIR}
|
||||
${imgui_SOURCE_DIR}/backends
|
||||
)
|
||||
target_link_libraries(imgui PUBLIC glfw Vulkan::Headers volk)
|
||||
# Have ImGui's Vulkan backend pick up function pointers from volk directly,
|
||||
# instead of asking us to load them via ImGui_ImplVulkan_LoadFunctions.
|
||||
target_compile_definitions(imgui PUBLIC
|
||||
IMGUI_IMPL_VULKAN_NO_PROTOTYPES
|
||||
IMGUI_IMPL_VULKAN_USE_VOLK
|
||||
VK_NO_PROTOTYPES
|
||||
)
|
||||
|
||||
# Catch2 helpers (catch_discover_tests).
|
||||
include(CTest)
|
||||
include(${Catch2_SOURCE_DIR}/extras/Catch.cmake)
|
||||
|
||||
# ----------------------------------------------------------------------------
|
||||
# Project targets
|
||||
# ----------------------------------------------------------------------------
|
||||
add_subdirectory(shaders) # produces simv_shaders custom target
|
||||
add_subdirectory(src/core)
|
||||
add_subdirectory(src/vk)
|
||||
add_subdirectory(src/mesh)
|
||||
add_subdirectory(src/editor)
|
||||
add_subdirectory(src/app)
|
||||
enable_testing()
|
||||
add_subdirectory(tests)
|
||||
|
||||
message(STATUS "")
|
||||
message(STATUS "SimVulcan ${PROJECT_VERSION} configured.")
|
||||
message(STATUS " Build type: ${CMAKE_BUILD_TYPE}")
|
||||
message(STATUS " C++ std: ${CMAKE_CXX_STANDARD}")
|
||||
message(STATUS " Vulkan: ${Vulkan_VERSION}")
|
||||
message(STATUS " Generator: ${CMAKE_GENERATOR}")
|
||||
message(STATUS "")
|
||||
Reference in New Issue
Block a user