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)