463 lines
26 KiB
CMake
463 lines
26 KiB
CMake
# Datoviz 移植源码只在这个目录内维护,不加载上游 Datoviz 的总 CMake,也不生成 datoviz 库。
|
||
enable_language(C)
|
||
set(Renderive_render_3D_datoviz_root "${CMAKE_CURRENT_LIST_DIR}")
|
||
set(Renderive_render_3D_datoviz_include_dir "${Renderive_render_3D_datoviz_root}/include")
|
||
set(Renderive_render_3D_datoviz_src_dir "${Renderive_render_3D_datoviz_root}/src")
|
||
set(Renderive_render_3D_datoviz_external_dir "${Renderive_render_3D_datoviz_root}/external")
|
||
# 这些定义保持 Datoviz 当前 Vulkan/scene 源码的编译语义;未迁入的 app/gui/window 等能力明确关闭。
|
||
set(Renderive_render_3D_datoviz_os_linux 0)
|
||
set(Renderive_render_3D_datoviz_os_macos 0)
|
||
set(Renderive_render_3D_datoviz_os_windows 0)
|
||
set(Renderive_render_3D_datoviz_os_unix 0)
|
||
if(UNIX AND NOT APPLE)
|
||
set(Renderive_render_3D_datoviz_os_linux 1)
|
||
set(Renderive_render_3D_datoviz_os_unix 1)
|
||
elseif(APPLE)
|
||
set(Renderive_render_3D_datoviz_os_macos 1)
|
||
set(Renderive_render_3D_datoviz_os_unix 1)
|
||
elseif(WIN32)
|
||
set(Renderive_render_3D_datoviz_os_windows 1)
|
||
endif()
|
||
set(Renderive_render_3D_datoviz_cc_gcc 0)
|
||
set(Renderive_render_3D_datoviz_cc_clang 0)
|
||
set(Renderive_render_3D_datoviz_cc_msvc 0)
|
||
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
|
||
set(Renderive_render_3D_datoviz_cc_gcc 1)
|
||
elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
||
set(Renderive_render_3D_datoviz_cc_clang 1)
|
||
elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
|
||
set(Renderive_render_3D_datoviz_cc_msvc 1)
|
||
endif()
|
||
set(Renderive_render_3D_datoviz_compile_definitions
|
||
ENABLE_VALIDATION_LAYERS=$<IF:$<CONFIG:Release>,0,1>
|
||
DEBUG=$<IF:$<CONFIG:Debug>,1,0>
|
||
VK_NO_PROTOTYPES
|
||
OS_LINUX=${Renderive_render_3D_datoviz_os_linux}
|
||
OS_MACOS=${Renderive_render_3D_datoviz_os_macos}
|
||
OS_WINDOWS=${Renderive_render_3D_datoviz_os_windows}
|
||
OS_UNIX=${Renderive_render_3D_datoviz_os_unix}
|
||
CC_MSVC=${Renderive_render_3D_datoviz_cc_msvc}
|
||
CC_GCC=${Renderive_render_3D_datoviz_cc_gcc}
|
||
CC_CLANG=${Renderive_render_3D_datoviz_cc_clang}
|
||
DVZ_HAS_ZLIB=1
|
||
DVZ_HAS_OPENMP=0
|
||
DVZ_HAS_CUDA=0
|
||
DVZ_HAS_GLFW=0
|
||
DVZ_HAS_KVZ=0
|
||
DVZ_HAS_CGLM=1
|
||
DVZ_HAS_FREETYPE=1
|
||
DVZ_HAS_MSDF_ATLAS=1
|
||
DVZ_HAS_DRP2=1
|
||
DVZ_HAS_CONTROLLER=1
|
||
DVZ_HAS_SCENE=1
|
||
DVZ_HAS_APP=0
|
||
DVZ_HAS_GUI=0
|
||
DVZ_HAS_MIMALLOC=0
|
||
DVZ_ALLOCATOR_DEFAULT_MIMALLOC=0
|
||
DVZ_ENABLE_ASAN_IN_DEBUG=0
|
||
FPNG_NO_SSE=1
|
||
VMA_STATIC_VULKAN_FUNCTIONS=0
|
||
VMA_DYNAMIC_VULKAN_FUNCTIONS=0
|
||
)
|
||
if(WIN32)
|
||
list(APPEND Renderive_render_3D_datoviz_compile_definitions VK_USE_PLATFORM_WIN32_KHR NOMINMAX)
|
||
endif()
|
||
|
||
# 项目的 MSVC 包装器只转发到 cl.exe,也可能在未初始化 VS 环境的进程中运行。这里从当前
|
||
# 编译器和 Windows SDK 派生标准头目录,避免依赖进程级 INCLUDE 状态。
|
||
set(Renderive_render_3D_datoviz_msvc_system_include_dirs)
|
||
if(MSVC)
|
||
get_filename_component(Renderive_render_3D_datoviz_msvc_compiler_dir
|
||
"${CMAKE_CXX_COMPILER}" DIRECTORY)
|
||
get_filename_component(
|
||
Renderive_render_3D_datoviz_msvc_tools_dir
|
||
"${Renderive_render_3D_datoviz_msvc_compiler_dir}/../../.." ABSOLUTE)
|
||
if(NOT EXISTS "${Renderive_render_3D_datoviz_msvc_tools_dir}/include/stdint.h")
|
||
message(FATAL_ERROR
|
||
"Unable to locate the MSVC standard library for ${CMAKE_CXX_COMPILER}")
|
||
endif()
|
||
list(APPEND Renderive_render_3D_datoviz_msvc_system_include_dirs
|
||
"${Renderive_render_3D_datoviz_msvc_tools_dir}/include")
|
||
|
||
cmake_host_system_information(
|
||
RESULT Renderive_render_3D_datoviz_windows_kits_root
|
||
QUERY WINDOWS_REGISTRY
|
||
"HKLM/SOFTWARE/Microsoft/Windows Kits/Installed Roots"
|
||
VALUE "KitsRoot10")
|
||
file(GLOB Renderive_render_3D_datoviz_windows_sdk_include_roots
|
||
LIST_DIRECTORIES TRUE
|
||
"${Renderive_render_3D_datoviz_windows_kits_root}/Include/*")
|
||
list(SORT Renderive_render_3D_datoviz_windows_sdk_include_roots
|
||
COMPARE NATURAL ORDER DESCENDING)
|
||
set(Renderive_render_3D_datoviz_windows_sdk_include_root)
|
||
foreach(Renderive_render_3D_datoviz_windows_sdk_candidate
|
||
IN LISTS Renderive_render_3D_datoviz_windows_sdk_include_roots)
|
||
if(EXISTS "${Renderive_render_3D_datoviz_windows_sdk_candidate}/ucrt/errno.h"
|
||
AND IS_DIRECTORY "${Renderive_render_3D_datoviz_windows_sdk_candidate}/shared"
|
||
AND IS_DIRECTORY "${Renderive_render_3D_datoviz_windows_sdk_candidate}/um")
|
||
set(Renderive_render_3D_datoviz_windows_sdk_include_root
|
||
"${Renderive_render_3D_datoviz_windows_sdk_candidate}")
|
||
break()
|
||
endif()
|
||
endforeach()
|
||
if(NOT Renderive_render_3D_datoviz_windows_sdk_include_root)
|
||
message(FATAL_ERROR "Unable to locate Windows SDK headers under Windows KitsRoot10")
|
||
endif()
|
||
list(APPEND Renderive_render_3D_datoviz_msvc_system_include_dirs
|
||
"${Renderive_render_3D_datoviz_windows_sdk_include_root}/ucrt"
|
||
"${Renderive_render_3D_datoviz_windows_sdk_include_root}/shared"
|
||
"${Renderive_render_3D_datoviz_windows_sdk_include_root}/um"
|
||
"${Renderive_render_3D_datoviz_windows_sdk_include_root}/winrt"
|
||
"${Renderive_render_3D_datoviz_windows_sdk_include_root}/cppwinrt")
|
||
endif()
|
||
|
||
# 所有 Datoviz 移植模块共用同一套 C11/C++17、宏定义和目录分组。
|
||
function(Renderive_render_3D_datoviz_configure_target target)
|
||
target_compile_definitions(${target} PUBLIC ${Renderive_render_3D_datoviz_compile_definitions})
|
||
target_compile_features(${target} PRIVATE c_std_11 cxx_std_17)
|
||
set_target_properties(${target} PROPERTIES POSITION_INDEPENDENT_CODE ON FOLDER Renderive_render_3D/datoviz)
|
||
if(MSVC)
|
||
target_compile_definitions(${target} PRIVATE DVZ_SHARED)
|
||
target_include_directories(${target} SYSTEM PRIVATE
|
||
${Renderive_render_3D_datoviz_msvc_system_include_dirs})
|
||
target_compile_options(${target} PRIVATE /utf-8)
|
||
endif()
|
||
endfunction()
|
||
# 每个模块只从自己的移植目录收集顶层生产源码。
|
||
function(Renderive_render_3D_datoviz_collect_sources out dir)
|
||
file(GLOB _sources CONFIGURE_DEPENDS
|
||
"${dir}/*.c"
|
||
"${dir}/*.cc"
|
||
"${dir}/*.cpp"
|
||
"${dir}/*.cxx"
|
||
)
|
||
set(${out} ${_sources} PARENT_SCOPE)
|
||
endfunction()
|
||
if(TARGET Vulkan::Headers)
|
||
set(Renderive_render_3D_datoviz_vulkan_target Vulkan::Headers)
|
||
else()
|
||
set(Renderive_render_3D_datoviz_vulkan_target Vulkan::Vulkan)
|
||
endif()
|
||
# CORE/common:Datoviz 通用基础设施,线程实现沿用当前 PThreads4W 环境。
|
||
Renderive_render_3D_datoviz_collect_sources(Renderive_render_3D_datoviz_common_sources "${Renderive_render_3D_datoviz_src_dir}/common")
|
||
add_library(Renderive_render_3D_datoviz_common OBJECT ${Renderive_render_3D_datoviz_common_sources})
|
||
target_include_directories(Renderive_render_3D_datoviz_common PUBLIC "${Renderive_render_3D_datoviz_include_dir}" INTERFACE "${Renderive_render_3D_datoviz_src_dir}/common")
|
||
target_link_libraries(Renderive_render_3D_datoviz_common PUBLIC PThreads4W::PThreads4W)
|
||
Renderive_render_3D_datoviz_configure_target(Renderive_render_3D_datoviz_common)
|
||
# CORE/fileio:保留 Datoviz fileio + fpng 的边界,压缩统一使用工程已经安装的 ZLIB。
|
||
Renderive_render_3D_datoviz_collect_sources(Renderive_render_3D_datoviz_fileio_sources "${Renderive_render_3D_datoviz_src_dir}/fileio")
|
||
list(APPEND Renderive_render_3D_datoviz_fileio_sources "${Renderive_render_3D_datoviz_external_dir}/fpng.cpp")
|
||
add_library(Renderive_render_3D_datoviz_fileio OBJECT ${Renderive_render_3D_datoviz_fileio_sources})
|
||
target_include_directories(Renderive_render_3D_datoviz_fileio PUBLIC "${Renderive_render_3D_datoviz_include_dir}" "${Renderive_render_3D_datoviz_external_dir}" "${Renderive_render_3D_datoviz_src_dir}/common")
|
||
target_compile_definitions(Renderive_render_3D_datoviz_fileio PUBLIC FPNG_USE_UNALIGNED_LOADS=0)
|
||
target_link_libraries(Renderive_render_3D_datoviz_fileio PUBLIC ZLIB::ZLIB)
|
||
Renderive_render_3D_datoviz_configure_target(Renderive_render_3D_datoviz_fileio)
|
||
# CORE/geom:保持 Datoviz 的 cglm 数学依赖。
|
||
Renderive_render_3D_datoviz_collect_sources(Renderive_render_3D_datoviz_geom_sources "${Renderive_render_3D_datoviz_src_dir}/geom")
|
||
add_library(Renderive_render_3D_datoviz_geom OBJECT ${Renderive_render_3D_datoviz_geom_sources})
|
||
target_include_directories(Renderive_render_3D_datoviz_geom PUBLIC "${Renderive_render_3D_datoviz_include_dir}" "${Renderive_render_3D_datoviz_src_dir}/common" "${Renderive_render_3D_datoviz_external_dir}")
|
||
target_link_libraries(Renderive_render_3D_datoviz_geom PUBLIC cglm::cglm)
|
||
Renderive_render_3D_datoviz_configure_target(Renderive_render_3D_datoviz_geom)
|
||
# CORE/math:保持 cglm + 线程依赖。
|
||
Renderive_render_3D_datoviz_collect_sources(Renderive_render_3D_datoviz_math_sources "${Renderive_render_3D_datoviz_src_dir}/math")
|
||
add_library(Renderive_render_3D_datoviz_math OBJECT ${Renderive_render_3D_datoviz_math_sources})
|
||
target_include_directories(Renderive_render_3D_datoviz_math PUBLIC "${Renderive_render_3D_datoviz_include_dir}" "${Renderive_render_3D_datoviz_src_dir}/common")
|
||
target_link_libraries(Renderive_render_3D_datoviz_math PUBLIC cglm::cglm PThreads4W::PThreads4W)
|
||
Renderive_render_3D_datoviz_configure_target(Renderive_render_3D_datoviz_math)
|
||
# CORE/thread:线程模块只依赖线程运行库,不引入 Datoviz 其他 runtime。
|
||
Renderive_render_3D_datoviz_collect_sources(Renderive_render_3D_datoviz_thread_sources "${Renderive_render_3D_datoviz_src_dir}/thread")
|
||
add_library(Renderive_render_3D_datoviz_thread OBJECT ${Renderive_render_3D_datoviz_thread_sources})
|
||
target_include_directories(Renderive_render_3D_datoviz_thread PUBLIC "${Renderive_render_3D_datoviz_include_dir}" "${Renderive_render_3D_datoviz_src_dir}/common")
|
||
target_link_libraries(Renderive_render_3D_datoviz_thread PUBLIC PThreads4W::PThreads4W)
|
||
Renderive_render_3D_datoviz_configure_target(Renderive_render_3D_datoviz_thread)
|
||
# CONTROLLER/input:先保留 Datoviz 输入数据结构,不接 window/glfw。
|
||
Renderive_render_3D_datoviz_collect_sources(Renderive_render_3D_datoviz_input_sources "${Renderive_render_3D_datoviz_src_dir}/input")
|
||
add_library(Renderive_render_3D_datoviz_input OBJECT ${Renderive_render_3D_datoviz_input_sources})
|
||
target_include_directories(Renderive_render_3D_datoviz_input PUBLIC "${Renderive_render_3D_datoviz_include_dir}" "${Renderive_render_3D_datoviz_src_dir}/common")
|
||
Renderive_render_3D_datoviz_configure_target(Renderive_render_3D_datoviz_input)
|
||
# CONTROLLER/controller:保持 input -> math -> cglm 的原模块关系。
|
||
Renderive_render_3D_datoviz_collect_sources(Renderive_render_3D_datoviz_controller_sources "${Renderive_render_3D_datoviz_src_dir}/controller")
|
||
add_library(Renderive_render_3D_datoviz_controller OBJECT ${Renderive_render_3D_datoviz_controller_sources})
|
||
target_include_directories(Renderive_render_3D_datoviz_controller PUBLIC "${Renderive_render_3D_datoviz_include_dir}" "${Renderive_render_3D_datoviz_src_dir}/common" "${Renderive_render_3D_datoviz_src_dir}/controller")
|
||
target_link_libraries(Renderive_render_3D_datoviz_controller PUBLIC Renderive_render_3D_datoviz_input Renderive_render_3D_datoviz_math cglm::cglm)
|
||
Renderive_render_3D_datoviz_configure_target(Renderive_render_3D_datoviz_controller)
|
||
# VK/vk:直接使用工程安装的 volk、VMA 和 Vulkan Headers;不编译 Datoviz 自带第三方库。
|
||
Renderive_render_3D_datoviz_collect_sources(Renderive_render_3D_datoviz_vk_sources "${Renderive_render_3D_datoviz_src_dir}/vk")
|
||
list(APPEND Renderive_render_3D_datoviz_vk_sources "${Renderive_render_3D_datoviz_external_dir}/vk_mem_alloc.cpp")
|
||
add_library(Renderive_render_3D_datoviz_vk OBJECT ${Renderive_render_3D_datoviz_vk_sources})
|
||
target_include_directories(Renderive_render_3D_datoviz_vk PUBLIC "${Renderive_render_3D_datoviz_include_dir}" "${Renderive_render_3D_datoviz_src_dir}/common")
|
||
target_link_libraries(Renderive_render_3D_datoviz_vk PUBLIC volk::volk GPUOpen::VulkanMemoryAllocator ${Renderive_render_3D_datoviz_vulkan_target})
|
||
Renderive_render_3D_datoviz_configure_target(Renderive_render_3D_datoviz_vk)
|
||
# VK/vklite:保持 Datoviz 的轻量 Vulkan abstraction,GPU 入口由 vk/volk 提供。
|
||
Renderive_render_3D_datoviz_collect_sources(Renderive_render_3D_datoviz_vklite_sources "${Renderive_render_3D_datoviz_src_dir}/vklite")
|
||
add_library(Renderive_render_3D_datoviz_vklite OBJECT ${Renderive_render_3D_datoviz_vklite_sources})
|
||
target_include_directories(Renderive_render_3D_datoviz_vklite PUBLIC "${Renderive_render_3D_datoviz_include_dir}" "${Renderive_render_3D_datoviz_src_dir}/common" PRIVATE "${Renderive_render_3D_datoviz_src_dir}/vklite")
|
||
target_link_libraries(Renderive_render_3D_datoviz_vklite PUBLIC Renderive_render_3D_datoviz_vk cglm::cglm)
|
||
Renderive_render_3D_datoviz_configure_target(Renderive_render_3D_datoviz_vklite)
|
||
# DRP2:保留 packet/recording/backend 分层,由 vklite 执行 Vulkan backend。
|
||
Renderive_render_3D_datoviz_collect_sources(Renderive_render_3D_datoviz_drp2_sources "${Renderive_render_3D_datoviz_src_dir}/drp2")
|
||
add_library(Renderive_render_3D_datoviz_drp2 OBJECT ${Renderive_render_3D_datoviz_drp2_sources})
|
||
target_include_directories(Renderive_render_3D_datoviz_drp2
|
||
PUBLIC
|
||
"${Renderive_render_3D_datoviz_include_dir}"
|
||
"${Renderive_render_3D_datoviz_src_dir}/common"
|
||
"${Renderive_render_3D_datoviz_external_dir}"
|
||
PRIVATE
|
||
"${Vulkan_INCLUDE_DIR}")
|
||
target_compile_definitions(Renderive_render_3D_datoviz_drp2
|
||
PUBLIC
|
||
DVZ_DRP2_HAS_VKLITE=1
|
||
DVZ_HAS_SHADERC=1
|
||
PRIVATE
|
||
DVZ_SHADERC_STATIC=0
|
||
"DVZ_SHADERC_LIB_PATH=\"shaderc_shared.dll\"")
|
||
target_link_libraries(Renderive_render_3D_datoviz_drp2 PUBLIC Renderive_render_3D_datoviz_vklite)
|
||
Renderive_render_3D_datoviz_configure_target(Renderive_render_3D_datoviz_drp2)
|
||
# SCENE:与上游生产源码集合保持一致,明确排除 scene/tests。
|
||
set(Renderive_render_3D_datoviz_scene_dir "${Renderive_render_3D_datoviz_src_dir}/scene")
|
||
file(GLOB Renderive_render_3D_datoviz_scene_sources CONFIGURE_DEPENDS
|
||
"${Renderive_render_3D_datoviz_scene_dir}/*.c*"
|
||
"${Renderive_render_3D_datoviz_scene_dir}/query/*.c*"
|
||
"${Renderive_render_3D_datoviz_scene_dir}/shaders/*.c*"
|
||
"${Renderive_render_3D_datoviz_scene_dir}/visuals/*.c*"
|
||
"${Renderive_render_3D_datoviz_scene_dir}/visuals/*/*.c*"
|
||
"${Renderive_render_3D_datoviz_scene_dir}/annotation/*.c*"
|
||
"${Renderive_render_3D_datoviz_scene_dir}/color/*.c*"
|
||
"${Renderive_render_3D_datoviz_scene_dir}/core/*.c*"
|
||
"${Renderive_render_3D_datoviz_scene_dir}/domain/*.c*"
|
||
"${Renderive_render_3D_datoviz_scene_dir}/frame_plan/*.c*"
|
||
"${Renderive_render_3D_datoviz_scene_dir}/frame_plan/graph/*.c*"
|
||
"${Renderive_render_3D_datoviz_scene_dir}/interaction/*.c*"
|
||
"${Renderive_render_3D_datoviz_scene_dir}/plot/*.c*"
|
||
"${Renderive_render_3D_datoviz_scene_dir}/render_contract/*.c*"
|
||
"${Renderive_render_3D_datoviz_scene_dir}/runtime/*.c*"
|
||
"${Renderive_render_3D_datoviz_scene_dir}/scene_emit/*.c*"
|
||
"${Renderive_render_3D_datoviz_scene_dir}/techniques/*.c*"
|
||
"${Renderive_render_3D_datoviz_scene_dir}/text/*.c*"
|
||
)
|
||
|
||
# text_atlas.cpp 依赖由上游 payload 转换脚本生成的 C++ 数组。
|
||
find_package(Python COMPONENTS Interpreter REQUIRED)
|
||
# Embed the loose shader sources into the registries consumed by the scene runtime. Runtime GLSL
|
||
# compilation uses shaderc; WGSL stays available to the browser/WebGPU-oriented scene paths.
|
||
set(Renderive_render_3D_datoviz_glsl_dir
|
||
"${Renderive_render_3D_datoviz_scene_dir}/shaders/glsl")
|
||
file(GLOB Renderive_render_3D_datoviz_glsl_text_sources CONFIGURE_DEPENDS
|
||
"${Renderive_render_3D_datoviz_glsl_dir}/*.vert"
|
||
"${Renderive_render_3D_datoviz_glsl_dir}/*.frag"
|
||
"${Renderive_render_3D_datoviz_glsl_dir}/*.comp"
|
||
"${Renderive_render_3D_datoviz_glsl_dir}/*.glsl")
|
||
file(GLOB Renderive_render_3D_datoviz_glsl_stage_sources CONFIGURE_DEPENDS
|
||
"${Renderive_render_3D_datoviz_glsl_dir}/*.vert"
|
||
"${Renderive_render_3D_datoviz_glsl_dir}/*.frag"
|
||
"${Renderive_render_3D_datoviz_glsl_dir}/*.comp")
|
||
file(GLOB Renderive_render_3D_datoviz_glsl_includes CONFIGURE_DEPENDS
|
||
"${Renderive_render_3D_datoviz_glsl_dir}/*.glsl")
|
||
file(GLOB Renderive_render_3D_datoviz_wgsl_sources CONFIGURE_DEPENDS
|
||
"${Renderive_render_3D_datoviz_scene_dir}/shaders/wgsl/*.wgsl")
|
||
set(Renderive_render_3D_datoviz_generated_dir
|
||
"${CMAKE_CURRENT_BINARY_DIR}/generated")
|
||
set(Renderive_render_3D_datoviz_scene_spirv_dir
|
||
"${Renderive_render_3D_datoviz_generated_dir}/shaders")
|
||
file(MAKE_DIRECTORY "${Renderive_render_3D_datoviz_scene_spirv_dir}")
|
||
if(Vulkan_GLSLC_EXECUTABLE)
|
||
set(Renderive_render_3D_datoviz_glslc "${Vulkan_GLSLC_EXECUTABLE}")
|
||
else()
|
||
find_program(Renderive_render_3D_datoviz_glslc
|
||
NAMES glslc
|
||
HINTS "$ENV{VULKAN_SDK}/Bin" "$ENV{VULKAN_SDK}/bin")
|
||
endif()
|
||
if(NOT Renderive_render_3D_datoviz_glslc)
|
||
message(FATAL_ERROR "glslc is required to build the Datoviz scene shaders")
|
||
endif()
|
||
|
||
set(Renderive_render_3D_datoviz_scene_spirv_outputs)
|
||
foreach(Renderive_render_3D_datoviz_shader
|
||
IN LISTS Renderive_render_3D_datoviz_glsl_stage_sources)
|
||
get_filename_component(Renderive_render_3D_datoviz_shader_name
|
||
"${Renderive_render_3D_datoviz_shader}" NAME)
|
||
get_filename_component(Renderive_render_3D_datoviz_shader_extension
|
||
"${Renderive_render_3D_datoviz_shader}" EXT)
|
||
set(Renderive_render_3D_datoviz_shader_output
|
||
"${Renderive_render_3D_datoviz_scene_spirv_dir}/${Renderive_render_3D_datoviz_shader_name}.spv")
|
||
if(Renderive_render_3D_datoviz_shader_extension STREQUAL ".comp")
|
||
set(Renderive_render_3D_datoviz_shader_target_args
|
||
--target-env=vulkan1.3 --target-spv=spv1.6)
|
||
else()
|
||
set(Renderive_render_3D_datoviz_shader_target_args
|
||
--target-env=vulkan1.0 --target-spv=spv1.0)
|
||
endif()
|
||
add_custom_command(
|
||
OUTPUT "${Renderive_render_3D_datoviz_shader_output}"
|
||
COMMAND "${Renderive_render_3D_datoviz_glslc}"
|
||
${Renderive_render_3D_datoviz_shader_target_args}
|
||
-I "${Renderive_render_3D_datoviz_glsl_dir}"
|
||
-o "${Renderive_render_3D_datoviz_shader_output}"
|
||
"${Renderive_render_3D_datoviz_shader}"
|
||
DEPENDS
|
||
"${Renderive_render_3D_datoviz_shader}"
|
||
${Renderive_render_3D_datoviz_glsl_includes}
|
||
COMMENT "Compiling Datoviz scene shader ${Renderive_render_3D_datoviz_shader_name}"
|
||
VERBATIM)
|
||
list(APPEND Renderive_render_3D_datoviz_scene_spirv_outputs
|
||
"${Renderive_render_3D_datoviz_shader_output}")
|
||
endforeach()
|
||
set(Renderive_render_3D_datoviz_shaders_c
|
||
"${Renderive_render_3D_datoviz_generated_dir}/_shaders.c")
|
||
set(Renderive_render_3D_datoviz_glsl_shaders_c
|
||
"${Renderive_render_3D_datoviz_generated_dir}/_glsl_shaders.c")
|
||
set(Renderive_render_3D_datoviz_wgsl_shaders_c
|
||
"${Renderive_render_3D_datoviz_generated_dir}/_wgsl_shaders.c")
|
||
set(Renderive_render_3D_datoviz_font_sources
|
||
"${Renderive_render_3D_datoviz_root}/data/assets/fonts/Roboto-Regular.ttf"
|
||
"${Renderive_render_3D_datoviz_root}/data/assets/fonts/RobotoMono-Medium.ttf")
|
||
set(Renderive_render_3D_datoviz_fonts_c
|
||
"${Renderive_render_3D_datoviz_generated_dir}/_fonts.c")
|
||
string(REPLACE ";" "\\;" Renderive_render_3D_datoviz_glsl_text_sources_escaped
|
||
"${Renderive_render_3D_datoviz_glsl_text_sources}")
|
||
string(REPLACE ";" "\\;" Renderive_render_3D_datoviz_wgsl_sources_escaped
|
||
"${Renderive_render_3D_datoviz_wgsl_sources}")
|
||
string(REPLACE ";" "\\;" Renderive_render_3D_datoviz_scene_spirv_outputs_escaped
|
||
"${Renderive_render_3D_datoviz_scene_spirv_outputs}")
|
||
string(REPLACE ";" "\\;" Renderive_render_3D_datoviz_font_sources_escaped
|
||
"${Renderive_render_3D_datoviz_font_sources}")
|
||
add_custom_command(
|
||
OUTPUT "${Renderive_render_3D_datoviz_shaders_c}"
|
||
COMMAND "${CMAKE_COMMAND}"
|
||
"-DFILES=${Renderive_render_3D_datoviz_scene_spirv_outputs_escaped}"
|
||
-DPREFIX=shader
|
||
"-DOUTPUT=${Renderive_render_3D_datoviz_shaders_c}"
|
||
-P "${Renderive_render_3D_datoviz_root}/cmake/embed_resources.cmake"
|
||
DEPENDS
|
||
${Renderive_render_3D_datoviz_scene_spirv_outputs}
|
||
"${Renderive_render_3D_datoviz_root}/cmake/embed_resources.cmake"
|
||
COMMENT "Embedding Datoviz SPIR-V scene shaders"
|
||
VERBATIM)
|
||
add_custom_command(
|
||
OUTPUT "${Renderive_render_3D_datoviz_glsl_shaders_c}"
|
||
COMMAND "${CMAKE_COMMAND}"
|
||
"-DFILES=${Renderive_render_3D_datoviz_glsl_text_sources_escaped}"
|
||
-DPREFIX=glsl
|
||
"-DOUTPUT=${Renderive_render_3D_datoviz_glsl_shaders_c}"
|
||
-P "${Renderive_render_3D_datoviz_root}/cmake/embed_text_resources.cmake"
|
||
DEPENDS
|
||
${Renderive_render_3D_datoviz_glsl_text_sources}
|
||
"${Renderive_render_3D_datoviz_root}/cmake/embed_text_resources.cmake"
|
||
COMMENT "Embedding Datoviz GLSL scene shaders"
|
||
VERBATIM)
|
||
add_custom_command(
|
||
OUTPUT "${Renderive_render_3D_datoviz_wgsl_shaders_c}"
|
||
COMMAND "${CMAKE_COMMAND}"
|
||
"-DFILES=${Renderive_render_3D_datoviz_wgsl_sources_escaped}"
|
||
-DPREFIX=wgsl
|
||
"-DOUTPUT=${Renderive_render_3D_datoviz_wgsl_shaders_c}"
|
||
-P "${Renderive_render_3D_datoviz_root}/cmake/embed_text_resources.cmake"
|
||
DEPENDS
|
||
${Renderive_render_3D_datoviz_wgsl_sources}
|
||
"${Renderive_render_3D_datoviz_root}/cmake/embed_text_resources.cmake"
|
||
COMMENT "Embedding Datoviz WGSL scene shaders"
|
||
VERBATIM)
|
||
add_custom_command(
|
||
OUTPUT "${Renderive_render_3D_datoviz_fonts_c}"
|
||
COMMAND "${CMAKE_COMMAND}"
|
||
"-DFILES=${Renderive_render_3D_datoviz_font_sources_escaped}"
|
||
-DPREFIX=font
|
||
"-DOUTPUT=${Renderive_render_3D_datoviz_fonts_c}"
|
||
-P "${Renderive_render_3D_datoviz_root}/cmake/embed_resources.cmake"
|
||
DEPENDS
|
||
${Renderive_render_3D_datoviz_font_sources}
|
||
"${Renderive_render_3D_datoviz_root}/cmake/embed_resources.cmake"
|
||
COMMENT "Embedding Datoviz scene fonts"
|
||
VERBATIM)
|
||
list(APPEND Renderive_render_3D_datoviz_scene_sources
|
||
"${Renderive_render_3D_datoviz_shaders_c}"
|
||
"${Renderive_render_3D_datoviz_glsl_shaders_c}"
|
||
"${Renderive_render_3D_datoviz_wgsl_shaders_c}"
|
||
"${Renderive_render_3D_datoviz_fonts_c}")
|
||
|
||
set(Renderive_render_3D_datoviz_text_atlas_source
|
||
"${Renderive_render_3D_datoviz_scene_dir}/text/text_default_msdf_atlas.inc")
|
||
set(Renderive_render_3D_datoviz_text_atlas_generated
|
||
"${CMAKE_CURRENT_BINARY_DIR}/text_default_msdf_atlas_generated.inc")
|
||
add_custom_command(
|
||
OUTPUT "${Renderive_render_3D_datoviz_text_atlas_generated}"
|
||
COMMAND "${Python_EXECUTABLE}"
|
||
"${Renderive_render_3D_datoviz_root}/tools/convert_msdf_atlas_payloads.py"
|
||
--input "${Renderive_render_3D_datoviz_text_atlas_source}"
|
||
--output "${Renderive_render_3D_datoviz_text_atlas_generated}"
|
||
DEPENDS
|
||
"${Renderive_render_3D_datoviz_text_atlas_source}"
|
||
"${Renderive_render_3D_datoviz_root}/tools/convert_msdf_atlas_payloads.py"
|
||
COMMENT "Generating Datoviz default MSDF atlas byte arrays"
|
||
VERBATIM
|
||
)
|
||
add_custom_target(Renderive_render_3D_datoviz_text_atlas
|
||
DEPENDS "${Renderive_render_3D_datoviz_text_atlas_generated}")
|
||
add_library(Renderive_render_3D_datoviz_scene OBJECT ${Renderive_render_3D_datoviz_scene_sources})
|
||
add_dependencies(Renderive_render_3D_datoviz_scene Renderive_render_3D_datoviz_text_atlas)
|
||
target_include_directories(Renderive_render_3D_datoviz_scene PUBLIC
|
||
"${Renderive_render_3D_datoviz_include_dir}"
|
||
"${Renderive_render_3D_datoviz_src_dir}/common"
|
||
"${Renderive_render_3D_datoviz_external_dir}"
|
||
"${Renderive_render_3D_datoviz_external_dir}/cimgui"
|
||
"${Renderive_render_3D_datoviz_src_dir}/scene"
|
||
"${Renderive_render_3D_datoviz_src_dir}/scene/annotation"
|
||
"${Renderive_render_3D_datoviz_src_dir}/scene/color"
|
||
"${Renderive_render_3D_datoviz_src_dir}/scene/core"
|
||
"${Renderive_render_3D_datoviz_src_dir}/scene/domain"
|
||
"${Renderive_render_3D_datoviz_src_dir}/scene/frame_plan"
|
||
"${Renderive_render_3D_datoviz_src_dir}/scene/frame_plan/graph"
|
||
"${Renderive_render_3D_datoviz_src_dir}/scene/interaction"
|
||
"${Renderive_render_3D_datoviz_src_dir}/scene/plot"
|
||
"${Renderive_render_3D_datoviz_src_dir}/scene/render_contract"
|
||
"${Renderive_render_3D_datoviz_src_dir}/scene/runtime"
|
||
"${Renderive_render_3D_datoviz_src_dir}/scene/scene_emit"
|
||
"${Renderive_render_3D_datoviz_src_dir}/scene/shaders"
|
||
"${Renderive_render_3D_datoviz_src_dir}/scene/techniques"
|
||
"${Renderive_render_3D_datoviz_src_dir}/scene/text"
|
||
"${Renderive_render_3D_datoviz_src_dir}/scene/visuals"
|
||
"${CMAKE_CURRENT_BINARY_DIR}"
|
||
)
|
||
target_compile_definitions(Renderive_render_3D_datoviz_scene PUBLIC
|
||
DVZ_HAS_PRECOMPILED_SHADERS=1
|
||
DVZ_HAS_GLSL_SHADERS=1
|
||
DVZ_HAS_WGSL_SHADERS=1
|
||
DVZ_HAS_EMBEDDED_FONTS=1
|
||
DVZ_HAS_FREETYPE=1
|
||
DVZ_HAS_MSDF_ATLAS=1
|
||
DVZ_HAS_MSDF_SVG=1
|
||
DVZ_DRP2_HAS_VKLITE=1
|
||
)
|
||
target_link_libraries(Renderive_render_3D_datoviz_scene PUBLIC
|
||
Renderive_render_3D_datoviz_geom
|
||
Renderive_render_3D_datoviz_controller
|
||
Renderive_render_3D_datoviz_drp2
|
||
cglm::cglm
|
||
Freetype::Freetype
|
||
msdfgen::msdfgen
|
||
msdf-atlas-gen::msdf-atlas-gen
|
||
tinyxml2::tinyxml2
|
||
ZLIB::ZLIB
|
||
)
|
||
Renderive_render_3D_datoviz_configure_target(Renderive_render_3D_datoviz_scene)
|
||
# 只把需要的 Datoviz 模块交给 Render_3D;canvas/window/stream/video/app/gui/qtbridge/wasm 不进入目标。
|
||
set(Renderive_render_3D_datoviz_targets
|
||
Renderive_render_3D_datoviz_common
|
||
Renderive_render_3D_datoviz_fileio
|
||
Renderive_render_3D_datoviz_geom
|
||
Renderive_render_3D_datoviz_math
|
||
Renderive_render_3D_datoviz_thread
|
||
Renderive_render_3D_datoviz_input
|
||
Renderive_render_3D_datoviz_controller
|
||
Renderive_render_3D_datoviz_vk
|
||
Renderive_render_3D_datoviz_vklite
|
||
Renderive_render_3D_datoviz_drp2
|
||
Renderive_render_3D_datoviz_scene
|
||
PARENT_SCOPE
|
||
)
|
||
|
||
if(RENDERIVE_BUILD_TESTS)
|
||
include("${Renderive_render_3D_datoviz_root}/cmake/DatovizTests.cmake")
|
||
Renderive_render_3D_datoviz_add_tests()
|
||
endif()
|