# Dear ImGui built as a static lib with the Win32 + DX11 backends the host uses.
add_library(imgui STATIC
	imgui/imgui.cpp
	imgui/imgui_draw.cpp
	imgui/imgui_tables.cpp
	imgui/imgui_widgets.cpp
	imgui/imgui_demo.cpp
	imgui/backends/imgui_impl_win32.cpp
	imgui/backends/imgui_impl_dx11.cpp)

target_include_directories(imgui PUBLIC
	imgui
	imgui/backends)

# ImGui's own sources are third-party; don't subject them to /W4.
if(MSVC)
	target_compile_options(imgui PRIVATE /W0)
endif()

target_link_libraries(imgui PUBLIC d3d11 dxgi dwmapi)

# --- Vulkan: official Khronos headers + volk meta-loader (submodules) -------
# volk dynamically loads vulkan-1.dll at runtime (no link-time loader lib, no SDK install),
# so the Vulkan mock backend + capture hook need only these two submodules.
coop_require_submodule("Vulkan-Headers" "third_party/Vulkan-Headers/include/vulkan/vulkan.h")
coop_require_submodule("volk" "third_party/volk/volk.h")

add_library(vulkan_headers INTERFACE)
target_include_directories(vulkan_headers INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/Vulkan-Headers/include)

add_library(volk STATIC volk/volk.c)
target_include_directories(volk PUBLIC volk)
target_link_libraries(volk PUBLIC vulkan_headers)
# VK_NO_PROTOTYPES: volk provides the entry points itself (no link to a loader lib).
target_compile_definitions(volk PUBLIC VK_NO_PROTOTYPES)
if(WIN32)
	target_compile_definitions(volk PUBLIC VK_USE_PLATFORM_WIN32_KHR)
endif()
if(MSVC)
	target_compile_options(volk PRIVATE /W0) # third-party source
	# Match the rest of the project's CRT (dynamic) so it doesn't drag in LIBCMT (LNK4098).
	set_target_properties(volk PROPERTIES MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL")
endif()
