vendored meshoptimizer 1.2(submodule 环境故障改直接 vendor)。Mesh 多 LOD:各级索引连续拼进同一 index buffer(共享顶点,LodRange 区间 选择),解析期 meshopt_simplify 生成链(LOD0=原始,每级目标减半, 相对误差 1e-2,小网格复用上级);都在 worker 线程,加载零额外卡顿。 SceneRenderer 按 (mesh, LOD) 聚合 batch(lookup key = 指针<<8|lod): 主视图按屏占比近似 radius/dist 选级(阈值 10/20 倍半径);阴影级联 按级联序降级(越远越简)。Draw 按 batch.lod 选索引区间。 A/B 对比(100 背包 10×10,RTX 5060 Laptop,vsync off): - 纯背包:LOD 开 93-95 fps / 关 90-107 fps —— 无显著差异 - 加 SunTemple:LOD 开 52-56 / 关 51-55 —— 无显著差异 结论:当前场景瓶颈不在顶点数(5060 顶点吞吐富余),LOD 基础设施 保留(几何复杂资产/低端 GPU/更大场景生效),帧率问题转向 Tracy GPU 时间线定位真实瓶颈。 坑:LodRange 记录"LOD 不足复用最后一级"时 first 不得继续累加 (buffer 无重复数据,累加必越界——VUID-08798 抓的)。
56 lines
2.0 KiB
CMake
56 lines
2.0 KiB
CMake
file(GLOB_RECURSE ENGINE_SOURCES
|
||
src/*.cpp
|
||
)
|
||
|
||
# ImGui(docking 分支,vendored submodule)
|
||
set(IMGUI_DIR ${CMAKE_SOURCE_DIR}/Lib/imgui)
|
||
set(IMGUI_SOURCES
|
||
${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
|
||
)
|
||
|
||
# 编译成静态库
|
||
add_library(Engine STATIC ${ENGINE_SOURCES} ${IMGUI_SOURCES})
|
||
|
||
|
||
target_include_directories(Engine PUBLIC
|
||
${CMAKE_CURRENT_SOURCE_DIR}/include
|
||
${CMAKE_SOURCE_DIR}/Lib/entt/src
|
||
${CMAKE_SOURCE_DIR}/Lib/VulkanMemoryAllocator/include
|
||
${IMGUI_DIR}
|
||
${IMGUI_DIR}/backends
|
||
)
|
||
|
||
# 链接第三方库
|
||
target_link_libraries(Engine PUBLIC
|
||
glfw
|
||
Vulkan::Vulkan
|
||
spdlog::spdlog
|
||
stb
|
||
assimp::assimp
|
||
)
|
||
|
||
# Tracy(CPU/GPU 帧分析):宏关闭时全部退化空操作,零开销
|
||
set(TRACY_DIR ${CMAKE_SOURCE_DIR}/Lib/tracy)
|
||
target_include_directories(Engine PUBLIC ${TRACY_DIR}/public)
|
||
target_sources(Engine PRIVATE ${TRACY_DIR}/public/TracyClient.cpp)
|
||
target_compile_definitions(Engine PUBLIC TRACY_ENABLE)
|
||
# 按需剖析:GPU context 宣告(GpuNewContext)与连接绑定——GUI 永远晚于
|
||
# 程序启动连接,没有这个宏宣告消息被丢弃,GPU 时间线永远空白
|
||
target_compile_definitions(Engine PUBLIC TRACY_ON_DEMAND)
|
||
|
||
find_package(Threads REQUIRED)
|
||
target_link_libraries(Engine PUBLIC Threads::Threads)
|
||
|
||
# meshoptimizer(vendored,LOD 网格简化;submodule 机制故障改为直接 vendor)
|
||
file(GLOB MESHOPT_SOURCES ${CMAKE_SOURCE_DIR}/Lib/meshoptimizer/src/*.cpp)
|
||
add_library(meshopt STATIC ${MESHOPT_SOURCES})
|
||
target_include_directories(meshopt PUBLIC ${CMAKE_SOURCE_DIR}/Lib/meshoptimizer/src)
|
||
target_link_libraries(Engine PUBLIC meshopt)
|
||
|
||
target_compile_definitions(Engine PRIVATE VULKAN_HPP_DISPATCH_LOADER_DYNAMIC=1) |