render3D 安装好依赖库

This commit is contained in:
2026-08-13 16:48:35 +08:00
parent e8e8b29806
commit fa08c7860c
65 changed files with 194 additions and 83 deletions
+1
View File
@@ -6,3 +6,4 @@
/Kernel/Renderive_线程问题审计.md
/webapp_gallery/node_modules/
/webapp_gallery/dist/
/third_party/datoviz/
+4 -4
View File
@@ -6,16 +6,13 @@ option(RENDERIVE_BUILD_2D "Build 2D renderer" ON)
option(RENDERIVE_BUILD_QT "Build Qt integration" ON)
option(RENDERIVE_BUILD_WEB "Build Web integration" ON)
option(RENDERIVE_BUILD_TESTS "Build tests" ON)
option(RENDERIVE_BUILD_3D "Build 3D renderer" OFF)
option(RENDERIVE_BUILD_3D "Build 3D renderer" ON)
if (RENDERIVE_BUILD_QT AND NOT RENDERIVE_BUILD_2D)
message(FATAL_ERROR "RENDERIVE_BUILD_QT requires RENDERIVE_BUILD_2D")
endif ()
if (RENDERIVE_BUILD_WEB AND NOT RENDERIVE_BUILD_2D)
message(FATAL_ERROR "RENDERIVE_BUILD_WEB requires RENDERIVE_BUILD_2D")
endif ()
if (RENDERIVE_BUILD_3D)
message(FATAL_ERROR "RENDERIVE_BUILD_3D is reserved; the 3D renderer is not implemented")
endif ()
include("${CMAKE_CURRENT_LIST_DIR}/third_party/build_infra/start.cmake")
if (RENDERIVE_BUILD_TESTS)
enable_testing()
@@ -24,6 +21,9 @@ add_subdirectory(Kernel)
if (RENDERIVE_BUILD_2D)
add_subdirectory(render_2D)
endif ()
if (RENDERIVE_BUILD_3D)
add_subdirectory(render_3D)
endif ()
if (RENDERIVE_BUILD_QT)
add_subdirectory(Qt)
endif ()
+17 -17
View File
@@ -1,38 +1,38 @@
set(Renderive_Kernel_dependencies global::taskflow)
if(RENDERIVE_BUILD_TESTS)
if (RENDERIVE_BUILD_TESTS)
list(APPEND Renderive_Kernel_dependencies global::GTest)
endif()
endif ()
rcl_add_dependency_action_targets(Renderive_Kernel_env ${Renderive_Kernel_dependencies})
set_target_properties(Renderive_Kernel_env PROPERTIES FOLDER Renderive_Kernel)
library_is_installed_with_rely(Renderive_Kernel_dependencies_installed ${Renderive_Kernel_dependencies})
if(NOT Renderive_Kernel_dependencies_installed)
rcl_log_append("[FATAL_ERROR] Renderive_Kernel dependencies are not installed. Build Renderive_Kernel_env first")
if (NOT Renderive_Kernel_dependencies_installed)
rcl_log_append(${CMAKE_CURRENT_LIST_LINE} "[FATAL_ERROR] Renderive_Kernel dependencies are not installed. Build Renderive_Kernel_env first")
return()
endif()
endif ()
rcl_load_dependency_environment(${Renderive_Kernel_dependencies})
find_package(Taskflow CONFIG REQUIRED)
find_package(Threads REQUIRED)
if(RENDERIVE_BUILD_TESTS)
if (RENDERIVE_BUILD_TESTS)
find_package(GTest CONFIG REQUIRED)
endif()
endif ()
set(Renderive_Kernel_source_dir "${CMAKE_CURRENT_LIST_DIR}/src")
append_glob_source(Renderive_Kernel_sources "${Renderive_Kernel_source_dir}")
add_library(Renderive_Kernel STATIC ${Renderive_Kernel_sources})
target_include_directories(Renderive_Kernel PUBLIC
"$<BUILD_INTERFACE:${Renderive_Kernel_source_dir}>"
"$<BUILD_INTERFACE:${Renderive_Kernel_source_dir}>"
)
target_compile_features(Renderive_Kernel PUBLIC cxx_std_20)
target_link_libraries(Renderive_Kernel PRIVATE Taskflow::Taskflow Threads::Threads)
if(MSVC)
if (MSVC)
target_compile_options(Renderive_Kernel PRIVATE /utf-8)
endif()
if(RENDERIVE_BUILD_TESTS)
endif ()
if (RENDERIVE_BUILD_TESTS)
set(Renderive_Kernel_test_dir "${CMAKE_CURRENT_LIST_DIR}/tests")
append_glob_source(Renderive_Kernel_test_sources "${Renderive_Kernel_test_dir}")
foreach(Renderive_Kernel_test_source IN LISTS Renderive_Kernel_test_sources)
if(NOT Renderive_Kernel_test_source MATCHES "\\.(c|cc|cpp|cxx)$")
foreach (Renderive_Kernel_test_source IN LISTS Renderive_Kernel_test_sources)
if (NOT Renderive_Kernel_test_source MATCHES "\\.(c|cc|cpp|cxx)$")
continue()
endif()
endif ()
file(RELATIVE_PATH Renderive_Kernel_test_name "${Renderive_Kernel_test_dir}" "${Renderive_Kernel_test_source}")
string(MD5 Renderive_Kernel_test_hash "${Renderive_Kernel_test_name}")
string(SUBSTRING "${Renderive_Kernel_test_hash}" 0 8 Renderive_Kernel_test_hash)
@@ -41,9 +41,9 @@ if(RENDERIVE_BUILD_TESTS)
set(Renderive_Kernel_test_target "Renderive_Kernel_${Renderive_Kernel_test_name}_${Renderive_Kernel_test_hash}")
add_executable("${Renderive_Kernel_test_target}" "${Renderive_Kernel_test_source}")
target_include_directories("${Renderive_Kernel_test_target}" PRIVATE
"${Renderive_Kernel_test_dir}"
"${Renderive_Kernel_test_dir}"
)
target_link_libraries("${Renderive_Kernel_test_target}" PRIVATE Renderive_Kernel GTest::gtest_main)
add_test(NAME "${Renderive_Kernel_test_target}" COMMAND "${Renderive_Kernel_test_target}")
endforeach()
endif()
endforeach ()
endif ()
+2 -2
View File
@@ -6,7 +6,7 @@ rcl_add_dependency_action_targets(Renderive_Qt_env ${Renderive_Qt_dependencies})
set_target_properties(Renderive_Qt_env PROPERTIES FOLDER Renderive_Qt)
library_is_installed_with_rely(Renderive_Qt_dependencies_installed ${Renderive_Qt_dependencies})
if(NOT Renderive_Qt_dependencies_installed)
rcl_log_append("[FATAL_ERROR] Renderive_Qt dependencies are not installed. Build Renderive_Qt_env first")
rcl_log_append(${CMAKE_CURRENT_LIST_LINE} "[FATAL_ERROR] Renderive_Qt dependencies are not installed. Build Renderive_Qt_env first")
return()
endif()
if(Renderive_Qt_dependencies)
@@ -17,7 +17,7 @@ if(RENDERIVE_BUILD_TESTS)
find_package(GTest CONFIG REQUIRED)
endif()
if(NOT TARGET Renderive_render_2D)
rcl_log_append("[FATAL_ERROR] Renderive_Qt requires Renderive_render_2D")
rcl_log_append(${CMAKE_CURRENT_LIST_LINE} "[FATAL_ERROR] Renderive_Qt requires Renderive_render_2D")
return()
endif()
set(Renderive_Qt_source_dir "${CMAKE_CURRENT_LIST_DIR}")
+1 -1
View File
@@ -1,5 +1,5 @@
#pragma once
#include "render_2D/export.h"
#include "../../render_2D/src/export.h"
#include <QColor>
#include <QEvent>
#include <QPaintEvent>
-36
View File
@@ -1,36 +0,0 @@
include_guard(GLOBAL)
block()
_register_git_cmake_library(renderive::pthreads4w
"https://github.com/GerHobbelt/pthread-win32.git"
"v3.0.3.1"
)
rcl_get_effective_install_dir(renderive::pthreads4w PTHREADS4W_ROOT)
set(PTHREADS4W_INCLUDE_DIR "${PTHREADS4W_ROOT}/include")
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
set(PTHREADS4W_LIBRARY "${PTHREADS4W_ROOT}/lib/libpthreadVC3d.lib")
else ()
set(PTHREADS4W_LIBRARY "${PTHREADS4W_ROOT}/lib/libpthreadVC3.lib")
endif ()
set(PTHREADS4W_CONFIG_DIR "${CMAKE_CURRENT_LIST_DIR}/pthreads4w_config")
set(pthreads4w_opts
-DENABLE_TESTS=OFF
"-DDLLDEST=${PTHREADS4W_ROOT}/bin"
"-DLIBDEST=${PTHREADS4W_ROOT}/lib"
"-DHDRDEST=${PTHREADS4W_ROOT}/include"
)
rcl_cmake_library_set_cmake_options(renderive::pthreads4w ${pthreads4w_opts})
rcl_cmake_library_set_other_use_opt(renderive::pthreads4w
"-DPThreads4W_DIR=\"${PTHREADS4W_CONFIG_DIR}\""
"-DPThreads4W_INCLUDE_DIR=\"${PTHREADS4W_INCLUDE_DIR}\""
"-DPThreads4W_LIBRARY=\"${PTHREADS4W_LIBRARY}\""
)
rcl_cmake_library_set_init_script(renderive::pthreads4w
"set(PThreads4W_DIR \"${PTHREADS4W_CONFIG_DIR}\")"
"set(PThreads4W_INCLUDE_DIR \"${PTHREADS4W_INCLUDE_DIR}\")"
)
rcl_cmake_library_set_clear_script(renderive::pthreads4w
"unset(PThreads4W_DIR)"
"unset(PThreads4W_INCLUDE_DIR)"
"unset(PThreads4W_LIBRARY)"
)
endblock()
+19 -19
View File
@@ -1,42 +1,42 @@
set(Renderive_render_2D_dependencies global::blend2d)
if(RENDERIVE_BUILD_TESTS)
if (RENDERIVE_BUILD_TESTS)
list(APPEND Renderive_render_2D_dependencies global::GTest)
endif()
endif ()
rcl_add_dependency_action_targets(Renderive_render_2D_env ${Renderive_render_2D_dependencies})
set_target_properties(Renderive_render_2D_env PROPERTIES FOLDER Renderive_render_2D)
library_is_installed_with_rely(Renderive_render_2D_dependencies_installed ${Renderive_render_2D_dependencies})
if(NOT Renderive_render_2D_dependencies_installed)
rcl_log_append("[FATAL_ERROR] Renderive_render_2D dependencies are not installed. Build Renderive_render_2D_env first")
if (NOT Renderive_render_2D_dependencies_installed)
rcl_log_append(${CMAKE_CURRENT_LIST_LINE} "[FATAL_ERROR] Renderive_render_2D dependencies are not installed. Build Renderive_render_2D_env first")
return()
endif()
endif ()
rcl_load_dependency_environment(${Renderive_render_2D_dependencies})
find_package(blend2d CONFIG REQUIRED)
if(RENDERIVE_BUILD_TESTS)
if (RENDERIVE_BUILD_TESTS)
find_package(GTest CONFIG REQUIRED)
endif()
if(NOT TARGET Renderive_Kernel)
rcl_log_append("[FATAL_ERROR] Renderive_render_2D requires Renderive_Kernel")
endif ()
if (NOT TARGET Renderive_Kernel)
rcl_log_append(${CMAKE_CURRENT_LIST_LINE} "[FATAL_ERROR] Renderive_render_2D requires Renderive_Kernel")
return()
endif()
endif ()
set(Renderive_render_2D_source_dir "${CMAKE_CURRENT_LIST_DIR}")
append_glob_source(Renderive_render_2D_sources "${Renderive_render_2D_source_dir}")
list(FILTER Renderive_render_2D_sources EXCLUDE REGEX "/tests/")
add_library(Renderive_render_2D STATIC ${Renderive_render_2D_sources})
target_include_directories(Renderive_render_2D PUBLIC
"$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/..>"
"$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}>"
)
target_compile_features(Renderive_render_2D PUBLIC cxx_std_20)
target_link_libraries(Renderive_render_2D PUBLIC Renderive_Kernel blend2d::blend2d)
if(MSVC)
if (MSVC)
target_compile_options(Renderive_render_2D PRIVATE /utf-8)
endif()
if(RENDERIVE_BUILD_TESTS)
endif ()
if (RENDERIVE_BUILD_TESTS)
set(Renderive_render_2D_test_dir "${CMAKE_CURRENT_LIST_DIR}/tests")
append_glob_source(Renderive_render_2D_test_sources "${Renderive_render_2D_test_dir}")
foreach(Renderive_render_2D_test_source IN LISTS Renderive_render_2D_test_sources)
if(NOT Renderive_render_2D_test_source MATCHES "\\.(c|cc|cpp|cxx)$")
foreach (Renderive_render_2D_test_source IN LISTS Renderive_render_2D_test_sources)
if (NOT Renderive_render_2D_test_source MATCHES "\\.(c|cc|cpp|cxx)$")
continue()
endif()
endif ()
file(RELATIVE_PATH Renderive_render_2D_test_name "${Renderive_render_2D_test_dir}" "${Renderive_render_2D_test_source}")
string(MD5 Renderive_render_2D_test_hash "${Renderive_render_2D_test_name}")
string(SUBSTRING "${Renderive_render_2D_test_hash}" 0 8 Renderive_render_2D_test_hash)
@@ -46,5 +46,5 @@ if(RENDERIVE_BUILD_TESTS)
add_executable("${Renderive_render_2D_test_target}" "${Renderive_render_2D_test_source}")
target_link_libraries("${Renderive_render_2D_test_target}" PRIVATE Renderive_render_2D GTest::gtest_main)
add_test(NAME "${Renderive_render_2D_test_target}" COMMAND "${Renderive_render_2D_test_target}")
endforeach()
endif()
endforeach ()
endif ()
@@ -1,4 +1,4 @@
#include "render_2D/export.h"
#include "../src/export.h"
#include <gtest/gtest.h>
#include <algorithm>
#include <array>
@@ -1,4 +1,4 @@
#include "render_2D/export.h"
#include "../src/export.h"
#include "render_2D/plottable/Curve_Sampling.h"
#include "render_2D/render/Blend2D_Cache.h"
#include <gtest/gtest.h>
+56
View File
@@ -0,0 +1,56 @@
# 加载 datoviz的依赖库
include(${CMAKE_CURRENT_LIST_DIR}/cmake/export.cmake)
set(Renderive_render_3D_dependencies render_3D::pthreads4w render_3D::cglm)
if (RENDERIVE_BUILD_TESTS)
list(APPEND Renderive_render_3D_dependencies global::GTest)
endif ()
rcl_add_dependency_action_targets(Renderive_render_3D_env ${Renderive_render_3D_dependencies})
set_target_properties(Renderive_render_3D_env PROPERTIES FOLDER Renderive_render_3D)
library_is_installed_with_rely(Renderive_render_3D_dependencies_installed ${Renderive_render_3D_dependencies})
if (NOT Renderive_render_3D_dependencies_installed)
rcl_log_append(${CMAKE_CURRENT_LIST_LINE} "[FATAL_ERROR] Renderive_render_3D dependencies are not installed. Build Renderive_render_3D_env first")
return()
endif ()
rcl_load_dependency_environment(${Renderive_render_3D_dependencies})
# 官网下载安装 https://vulkan.lunarg.com/sdk/home
set(ENV{VULKAN_SDK} "C:/VulkanSDK/1.4.357.0")
find_package(Vulkan REQUIRED)
message(STATUS "${B}Vulkan_VERSION=${Vulkan_VERSION}${E}")
find_package(PThreads4W REQUIRED)
find_package(cglm CONFIG REQUIRED)
if (RENDERIVE_BUILD_TESTS)
find_package(GTest CONFIG REQUIRED)
endif ()
if (NOT TARGET Renderive_Kernel)
rcl_log_append(${CMAKE_CURRENT_LIST_LINE} "[FATAL_ERROR] Renderive_render_3D requires Renderive_Kernel")
return()
endif ()
set(Renderive_render_3D_source_dir "${CMAKE_CURRENT_LIST_DIR}")
append_glob_source(Renderive_render_3D_sources "${Renderive_render_3D_source_dir}")
list(FILTER Renderive_render_3D_sources EXCLUDE REGEX "/tests/")
add_library(Renderive_render_3D STATIC ${Renderive_render_3D_sources})
target_include_directories(Renderive_render_3D PUBLIC
"$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}>"
)
target_compile_features(Renderive_render_3D PUBLIC cxx_std_20)
if (MSVC)
target_compile_options(Renderive_render_3D PRIVATE /utf-8)
endif ()
if (RENDERIVE_BUILD_TESTS)
set(Renderive_render_3D_test_dir "${CMAKE_CURRENT_LIST_DIR}/tests")
append_glob_source(Renderive_render_3D_test_sources "${Renderive_render_3D_test_dir}")
foreach (Renderive_render_3D_test_source IN LISTS Renderive_render_3D_test_sources)
if (NOT Renderive_render_3D_test_source MATCHES "\\.(c|cc|cpp|cxx)$")
continue()
endif ()
file(RELATIVE_PATH Renderive_render_3D_test_name "${Renderive_render_3D_test_dir}" "${Renderive_render_3D_test_source}")
string(MD5 Renderive_render_3D_test_hash "${Renderive_render_3D_test_name}")
string(SUBSTRING "${Renderive_render_3D_test_hash}" 0 8 Renderive_render_3D_test_hash)
get_filename_component(Renderive_render_3D_test_name "${Renderive_render_3D_test_source}" NAME_WE)
string(MAKE_C_IDENTIFIER "${Renderive_render_3D_test_name}" Renderive_render_3D_test_name)
set(Renderive_render_3D_test_target "Renderive_render_3D_${Renderive_render_3D_test_name}_${Renderive_render_3D_test_hash}")
add_executable("${Renderive_render_3D_test_target}" "${Renderive_render_3D_test_source}")
target_link_libraries("${Renderive_render_3D_test_target}" PRIVATE Renderive_render_3D GTest::gtest_main)
add_test(NAME "${Renderive_render_3D_test_target}" COMMAND "${Renderive_render_3D_test_target}")
endforeach ()
endif ()
+24
View File
@@ -0,0 +1,24 @@
include_guard(GLOBAL)
block()
_register_git_cmake_library(render_3D::cglm
"https://github.com/recp/cglm.git"
"v0.9.6"
)
rcl_get_effective_install_dir(render_3D::cglm CGLM_ROOT)
set(CGLM_CONFIG_DIR "${CGLM_ROOT}/lib/cmake/cglm")
set(cglm_opts
-DCGLM_SHARED=OFF
-DCGLM_STATIC=ON
-DCGLM_USE_TEST=OFF
)
rcl_cmake_library_set_cmake_options(render_3D::cglm ${cglm_opts})
rcl_cmake_library_set_other_use_opt(render_3D::cglm
"-Dcglm_DIR=\"${CGLM_CONFIG_DIR}\""
)
rcl_cmake_library_set_init_script(render_3D::cglm
"set(cglm_DIR \"${CGLM_CONFIG_DIR}\")"
)
rcl_cmake_library_set_clear_script(render_3D::cglm
"unset(cglm_DIR)"
)
endblock()
+4
View File
@@ -0,0 +1,4 @@
rcl_init(render_3D)
include(${CMAKE_CURRENT_LIST_DIR}/pthreads4w.cmake)
include(${CMAKE_CURRENT_LIST_DIR}/cglm.cmake)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/module")
@@ -0,0 +1,25 @@
include_guard(GLOBAL)
rcl_get_effective_install_dir(render_3D::pthreads4w PTHREADS4W_ROOT)
set(PThreads4W_INCLUDE_DIR "${PTHREADS4W_ROOT}/include")
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
set(PThreads4W_LIBRARY "${PTHREADS4W_ROOT}/lib/pthreadVC3d.lib")
else ()
set(PThreads4W_LIBRARY "${PTHREADS4W_ROOT}/lib/pthreadVC3.lib")
endif ()
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(PThreads4W
REQUIRED_VARS
PThreads4W_INCLUDE_DIR
PThreads4W_LIBRARY
)
if (PThreads4W_FOUND AND NOT TARGET PThreads4W::PThreads4W)
add_library(PThreads4W::PThreads4W UNKNOWN IMPORTED)
set_target_properties(PThreads4W::PThreads4W PROPERTIES
IMPORTED_LOCATION "${PThreads4W_LIBRARY}"
INTERFACE_INCLUDE_DIRECTORIES "${PThreads4W_INCLUDE_DIR}"
)
endif ()
mark_as_advanced(
PThreads4W_INCLUDE_DIR
PThreads4W_LIBRARY
)
+37
View File
@@ -0,0 +1,37 @@
include_guard(GLOBAL)
block()
if (WIN32)
_register_git_cmake_library(render_3D::pthreads4w
"https://github.com/GerHobbelt/pthread-win32.git"
"v3.0.3.1"
)
rcl_get_effective_install_dir(render_3D::pthreads4w PTHREADS4W_ROOT)
set(PTHREADS4W_INCLUDE_DIR "${PTHREADS4W_ROOT}/include")
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
set(PTHREADS4W_LIBRARY "${PTHREADS4W_ROOT}/lib/pthreadVC3d.lib")
else ()
set(PTHREADS4W_LIBRARY "${PTHREADS4W_ROOT}/lib/pthreadVC3.lib")
endif ()
set(pthreads4w_opts
-DENABLE_TESTS=OFF
"-DCMAKE_C_FLAGS=-D_WINDLL"
"-DCMAKE_CXX_FLAGS=-D_WINDLL"
"-DDLLDEST=${PTHREADS4W_ROOT}/bin"
"-DLIBDEST=${PTHREADS4W_ROOT}/lib"
"-DHDRDEST=${PTHREADS4W_ROOT}/include"
)
rcl_cmake_library_set_cmake_options(render_3D::pthreads4w ${pthreads4w_opts})
rcl_cmake_library_set_other_use_opt(render_3D::pthreads4w
"-DPThreads4W_INCLUDE_DIR=\"${PTHREADS4W_INCLUDE_DIR}\""
"-DPThreads4W_LIBRARY=\"${PTHREADS4W_LIBRARY}\""
)
rcl_cmake_library_set_init_script(render_3D::pthreads4w
"set(PThreads4W_INCLUDE_DIR \"${PTHREADS4W_INCLUDE_DIR}\")"
"set(PThreads4W_LIBRARY \"${PTHREADS4W_LIBRARY}\")"
)
rcl_cmake_library_set_clear_script(render_3D::pthreads4w
"unset(PThreads4W_INCLUDE_DIR)"
"unset(PThreads4W_LIBRARY)"
)
endif ()
endblock()
View File
+2 -2
View File
@@ -88,7 +88,7 @@ add_custom_target(Renderive_Web_Assets
)
library_is_installed_with_rely(Renderive_Web_dependencies_installed ${Renderive_Web_dependencies})
if (NOT Renderive_Web_dependencies_installed)
rcl_log_append("[FATAL_ERROR] Renderive_Web dependencies are not installed. Build Renderive_Web_env first")
rcl_log_append(${CMAKE_CURRENT_LIST_LINE} "[FATAL_ERROR] Renderive_Web dependencies are not installed. Build Renderive_Web_env first")
return()
endif ()
function(renderive_find_web_dependencies)
@@ -105,7 +105,7 @@ function(renderive_find_web_dependencies)
endfunction()
renderive_find_web_dependencies()
if (NOT TARGET Renderive_render_2D)
rcl_log_append("[FATAL_ERROR] Renderive_Web requires Renderive_render_2D")
rcl_log_append(${CMAKE_CURRENT_LIST_LINE} "[FATAL_ERROR] Renderive_Web requires Renderive_render_2D")
return()
endif ()
if (NOT TARGET Adminive::Nlohmann)