- 动画:HumanoidRig 三层架构(standard 标准槽 / dialects 方言映射 / mapper 配对), 指/趾统一走世界增量两遍式烘焙;AnimationAttach 拆为纯算法 + facade;修正 HumanoidBasis 行走基朝向与跨骨架去重、根运动通道 - 物理:CharacterController 角色互碰撞 / shapeOffset / 接触事件;PhysicsWorld 接触合成与 字符冲量判定 - 渲染与材质:Model 多材质按材质拆子 mesh 与贴图路径解析、DDS 直传、GLB 内嵌纹理落盘、 不透明通道 alpha 固定 1.0、glTF FlipUVs 对齐;SceneSerializer 支持 meshIndex 与材质覆盖 - 脚本:FractureLib 抽为共享库(HostView 桥接)、WallFracture 参数直绑、新增 ThirdPersonCamera / Follower / WASDMove 玩法;移除 GameDirector / PlayerController / Target - 编辑器:新增 GamepadPanel、LogPanel(LogRing),改进 Inspector / 材质 / 统计 / 视口面板 - 依赖:vendored ufbx(FBX 5.x/6.x/7.x 全版本解析,替代 assimp 对 FBX 6.1 的拒读)
105 lines
4.3 KiB
CMake
105 lines
4.3 KiB
CMake
# ============ 第三方库目标(Engine 的依赖) ============
|
||
|
||
# ImGui(docking 分支,vendored submodule)
|
||
set(IMGUI_DIR ${CMAKE_SOURCE_DIR}/Lib/imgui)
|
||
add_library(imgui STATIC
|
||
${IMGUI_DIR}/imgui.cpp
|
||
${IMGUI_DIR}/imgui_draw.cpp
|
||
${IMGUI_DIR}/imgui_tables.cpp
|
||
${IMGUI_DIR}/imgui_widgets.cpp
|
||
# ${IMGUI_DIR}/imgui_demo.cpp # ShowDemoWindow 的实现(调试期保留)
|
||
${IMGUI_DIR}/backends/imgui_impl_glfw.cpp
|
||
${IMGUI_DIR}/backends/imgui_impl_vulkan.cpp
|
||
)
|
||
target_include_directories(imgui PUBLIC
|
||
${IMGUI_DIR}
|
||
${IMGUI_DIR}/backends)
|
||
# 两个 backend 头文件分别依赖 GLFW / Vulkan 头
|
||
target_link_libraries(imgui PUBLIC glfw Vulkan::Vulkan)
|
||
|
||
# ImGuizmo(视口操纵杆,vendored submodule;新版仓库源码在 src/,
|
||
# 只编译 ImGuizmo.cpp,GraphEditor/ImCurveEdit 等示例模块不用)
|
||
# IMGUI_DEFINE_MATH_OPERATORS 必须 PUBLIC:ImGuizmo.cpp 与任何
|
||
# include 其头文件的 TU 都要在 imgui.h 之前看到该宏(ImVec2 运算符)
|
||
set(IMGUIZMO_DIR ${CMAKE_SOURCE_DIR}/Lib/ImGuizmo/src)
|
||
add_library(ImGuizmo STATIC ${IMGUIZMO_DIR}/ImGuizmo.cpp)
|
||
target_include_directories(ImGuizmo PUBLIC ${IMGUIZMO_DIR})
|
||
target_compile_definitions(ImGuizmo PUBLIC IMGUI_DEFINE_MATH_OPERATORS)
|
||
target_link_libraries(ImGuizmo PUBLIC imgui)
|
||
|
||
# ufbx(FBX 全版本导入,vendored 单文件 C 库):assimp 的 FBX importer
|
||
# 只认 FBX 2011+,Mixamo 及大量网上资产是 FBX 6.1 binary(二进制布局
|
||
# 与 7.x 在对象 ID 层不兼容,assimp DOM 直接拒读)。ufbx 官方支持
|
||
# FBX 5.x/6.x/7.x 全版本,引擎的 .fbx 解析统一走它(glTF/OBJ 仍 assimp)
|
||
add_library(ufbx STATIC ${CMAKE_SOURCE_DIR}/Lib/ufbx/ufbx.c)
|
||
target_include_directories(ufbx PUBLIC ${CMAKE_SOURCE_DIR}/Lib/ufbx)
|
||
|
||
# Tracy(CPU/GPU 帧分析)
|
||
add_library(tracy STATIC ${CMAKE_SOURCE_DIR}/Lib/tracy/public/TracyClient.cpp)
|
||
target_include_directories(tracy PUBLIC ${CMAKE_SOURCE_DIR}/Lib/tracy/public)
|
||
target_compile_definitions(tracy PUBLIC
|
||
TRACY_ENABLE
|
||
# 按需剖析:GPU context 宣告(GpuNewContext)与连接绑定——GUI 永远晚于
|
||
# 程序启动连接,没有这个宏宣告消息被丢弃,GPU 时间线永远空白
|
||
TRACY_ON_DEMAND)
|
||
find_package(Threads REQUIRED)
|
||
if(WIN32)
|
||
target_link_libraries(tracy PUBLIC
|
||
Threads::Threads
|
||
ws2_32
|
||
dbghelp
|
||
secur32)
|
||
else()
|
||
target_link_libraries(tracy PUBLIC Threads::Threads)
|
||
endif()
|
||
|
||
|
||
# ============ Engine ============
|
||
|
||
file(GLOB_RECURSE ENGINE_SOURCES CONFIGURE_DEPENDS src/*.cpp)
|
||
|
||
# game 构建(HELLOVULKAN_EDITOR=OFF):editor 专属 pass 整 TU 不进产物
|
||
#(材质球预览 / Editor gizmo——对应头文件只含声明,无符号产出)
|
||
if(NOT HELLOVULKAN_EDITOR)
|
||
list(REMOVE_ITEM ENGINE_SOURCES
|
||
${CMAKE_CURRENT_SOURCE_DIR}/src/Renderer/Passes/MaterialPreviewPass.cpp
|
||
${CMAKE_CURRENT_SOURCE_DIR}/src/Renderer/Passes/EditorGizmoPass.cpp)
|
||
endif()
|
||
|
||
add_library(Engine STATIC ${ENGINE_SOURCES})
|
||
|
||
# PhysicsDebugDraw 派生 Jolt::DebugRendererSimple:Jolt 以 -fno-rtti 编译
|
||
#(有 key function 的基类 typeinfo 符号不存在),该 TU 必须同步关闭 RTTI,
|
||
# 否则派生类 typeinfo 引用悬空符号(链接期 undefined reference)
|
||
set_source_files_properties(src/Physics/PhysicsDebugDraw.cpp PROPERTIES
|
||
COMPILE_OPTIONS "-fno-rtti")
|
||
|
||
target_include_directories(Engine PUBLIC
|
||
${CMAKE_CURRENT_SOURCE_DIR}/include
|
||
# header-only 库:纯 include 路径
|
||
${CMAKE_SOURCE_DIR}/Lib/entt/src
|
||
${CMAKE_SOURCE_DIR}/Lib/VulkanMemoryAllocator/include)
|
||
|
||
target_link_libraries(Engine PUBLIC
|
||
glfw
|
||
glm::glm
|
||
Vulkan::Vulkan
|
||
spdlog::spdlog
|
||
stb
|
||
assimp::assimp
|
||
ufbx
|
||
meshoptimizer
|
||
Jolt::Jolt
|
||
yaml-cpp::yaml-cpp
|
||
imgui
|
||
ImGuizmo
|
||
tracy)
|
||
|
||
target_compile_definitions(Engine PRIVATE VULKAN_HPP_DISPATCH_LOADER_DYNAMIC=1)
|
||
|
||
# editor/game 编译期分离:HELLO_EDITOR=1 时预览子系统 + 编辑器消费端编译
|
||
#(PUBLIC——App 层 main.cpp 的编辑器装配同样按此宏裁剪)
|
||
if(HELLOVULKAN_EDITOR)
|
||
target_compile_definitions(Engine PUBLIC HELLO_EDITOR=1)
|
||
endif()
|