Files
Renderive/render_3D/datoviz/CMakeLists.txt
T
2026-08-15 19:58:39 +08:00

495 lines
28 KiB
CMake
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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()
if(WIN32)
if(NOT TARGET PThreads4W::PThreads4W)
message(FATAL_ERROR "Datoviz requires PThreads4W::PThreads4W on Windows")
endif()
set(Renderive_render_3D_datoviz_thread_target PThreads4W::PThreads4W)
else()
find_package(Threads REQUIRED)
set(Renderive_render_3D_datoviz_thread_target Threads::Threads)
endif()
# CORE/commonDatoviz 通用基础设施使用平台线程运行库。
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 ${Renderive_render_3D_datoviz_thread_target})
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 ${Renderive_render_3D_datoviz_thread_target})
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 ${Renderive_render_3D_datoviz_thread_target})
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 abstractionGPU 入口由 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")
function(Renderive_render_3D_write_resource_manifest output)
file(WRITE "${output}" "set(RESOURCE_FILES)\n")
foreach(resource IN LISTS ARGN)
file(APPEND "${output}"
"list(APPEND RESOURCE_FILES [==[${resource}]==])\n")
endforeach()
endfunction()
set(Renderive_render_3D_datoviz_spirv_manifest
"${Renderive_render_3D_datoviz_generated_dir}/spirv_sources.cmake")
set(Renderive_render_3D_datoviz_glsl_manifest
"${Renderive_render_3D_datoviz_generated_dir}/glsl_sources.cmake")
set(Renderive_render_3D_datoviz_wgsl_manifest
"${Renderive_render_3D_datoviz_generated_dir}/wgsl_sources.cmake")
set(Renderive_render_3D_datoviz_font_manifest
"${Renderive_render_3D_datoviz_generated_dir}/font_sources.cmake")
Renderive_render_3D_write_resource_manifest(
"${Renderive_render_3D_datoviz_spirv_manifest}"
${Renderive_render_3D_datoviz_scene_spirv_outputs})
Renderive_render_3D_write_resource_manifest(
"${Renderive_render_3D_datoviz_glsl_manifest}"
${Renderive_render_3D_datoviz_glsl_text_sources})
Renderive_render_3D_write_resource_manifest(
"${Renderive_render_3D_datoviz_wgsl_manifest}"
${Renderive_render_3D_datoviz_wgsl_sources})
Renderive_render_3D_write_resource_manifest(
"${Renderive_render_3D_datoviz_font_manifest}"
${Renderive_render_3D_datoviz_font_sources})
add_custom_command(
OUTPUT "${Renderive_render_3D_datoviz_shaders_c}"
COMMAND "${CMAKE_COMMAND}"
"-DMANIFEST=${Renderive_render_3D_datoviz_spirv_manifest}"
-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_spirv_manifest}"
"${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}"
"-DMANIFEST=${Renderive_render_3D_datoviz_glsl_manifest}"
-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_glsl_manifest}"
"${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}"
"-DMANIFEST=${Renderive_render_3D_datoviz_wgsl_manifest}"
-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_wgsl_manifest}"
"${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}"
"-DMANIFEST=${Renderive_render_3D_datoviz_font_manifest}"
-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_font_manifest}"
"${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_3Dcanvas/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()