@@ -0,0 +1,218 @@
# 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 ( )
# 所有 Datoviz 移植模块共用同一套 C11/C++17、宏定义和目录分组,后续替换 empty 源文件时不改变模块语义。
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_options ( ${ target } PRIVATE /utf-8 )
endif ( )
endfunction ( )
# 每个模块从自己的移植目录收集源码;当前 empty.c 只是占位,后续直接覆盖/加入 Datoviz 原源码即可。
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}" )
target_compile_definitions ( Renderive_render_3D_datoviz_drp2 PUBLIC DVZ_DRP2_HAS_VKLITE=1 DVZ_HAS_SHADERC=0 )
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:目录完整保留 Datoviz scene 子模块;当前关闭 shader/font 生成,避免在占位阶段依赖尚未迁入的资源文件。
file ( GLOB_RECURSE Renderive_render_3D_datoviz_scene_sources CONFIGURE_DEPENDS
"${Renderive_render_3D_datoviz_src_dir}/scene/*.c"
"${Renderive_render_3D_datoviz_src_dir}/scene/*.cc"
"${Renderive_render_3D_datoviz_src_dir}/scene/*.cpp"
"${Renderive_render_3D_datoviz_src_dir}/scene/*.cxx"
)
add_library ( Renderive_render_3D_datoviz_scene OBJECT ${ Renderive_render_3D_datoviz_scene_sources } )
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"
)
target_compile_definitions ( Renderive_render_3D_datoviz_scene PUBLIC
DVZ_HAS_PRECOMPILED_SHADERS=0
DVZ_HAS_GLSL_SHADERS=0
DVZ_HAS_WGSL_SHADERS=0
DVZ_HAS_EMBEDDED_FONTS=0
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
)