# 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=$,0,1> 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/common:Datoviz 通用基础设施使用平台线程运行库。 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 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") 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_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()