From 29311207db0340f792cb5fec06986676f69c8946 Mon Sep 17 00:00:00 2001 From: ohyzha Date: Fri, 26 Jul 2024 14:14:23 +0300 Subject: [PATCH] working msdfgen version of loading and building for win --- .gitea/workflows/DependencyMirrors.txt | 3 +- 3rdParty/CMakeLists.txt | 1 + 3rdParty/msdf/CMakeLists.txt | 78 ++++++++++++++++++++++++++ CMakeLists.txt | 3 +- openVulkanoCpp/Scene/Geometry.cpp | 2 +- 5 files changed, 84 insertions(+), 3 deletions(-) create mode 100644 3rdParty/msdf/CMakeLists.txt diff --git a/.gitea/workflows/DependencyMirrors.txt b/.gitea/workflows/DependencyMirrors.txt index 1b1164c..0f971ae 100644 --- a/.gitea/workflows/DependencyMirrors.txt +++ b/.gitea/workflows/DependencyMirrors.txt @@ -21,4 +21,5 @@ UTFCPP_REPO=https://git.madvoxel.net/Mirrors/utfcpp.git TRACY_REPO=https://git.madvoxel.net/Mirrors/tracy.git STB_REPO=https://git.madvoxel.net/Mirrors/stb.git UNITS_REPO=https://git.madvoxel.net/Mirrors/units.git -ANKERLUD_REPO=https://git.madvoxel.net/Mirrors/ankerl_unordered_dense.git \ No newline at end of file +ANKERLUD_REPO=https://git.madvoxel.net/Mirrors/ankerl_unordered_dense.git +MSDFGEN_REPO=https://git.madvoxel.net/Mirrors/msdfgen.git \ No newline at end of file diff --git a/3rdParty/CMakeLists.txt b/3rdParty/CMakeLists.txt index 976fbb5..71d5228 100644 --- a/3rdParty/CMakeLists.txt +++ b/3rdParty/CMakeLists.txt @@ -23,6 +23,7 @@ add_subdirectory(libarchive) add_subdirectory(boost) add_subdirectory(units) add_subdirectory(libjpeg-turbo) +add_subdirectory(msdf) if (NOT IOS) add_subdirectory(curl) endif() diff --git a/3rdParty/msdf/CMakeLists.txt b/3rdParty/msdf/CMakeLists.txt new file mode 100644 index 0000000..5900c01 --- /dev/null +++ b/3rdParty/msdf/CMakeLists.txt @@ -0,0 +1,78 @@ +include(FetchContent) + +unset(ASSIMP_FOUND) +find_package(ASSIMP QUIET) +if (NOT ASSIMP_FOUND) + message(FATAL_ERROR "Assimp package is required to build msdfgen") +endif() + +if(NOT DEFINED MSDFGEN_REPO) + set(MSDFGEN_REPO https://github.com/Chlumsky/msdfgen.git) +endif () + +if(NOT DEFINED VCPKG_REPO) + set(VCPKG_REPO https://github.com/microsoft/vcpkg.git) +endif() + +set(VCPKG_SRC_DIR "${CMAKE_BINARY_DIR}/_deps/vcpkg-src") +if (NOT EXISTS ${VCPKG_SRC_DIR} OR VCPKG_EXECUTABLE STREQUAL "" OR NOT DEFINED VCPKG_EXECUTABLE) + message("Cloning vcpkg...") + FetchContent_Declare( + vcpkg + EXCLUDE_FROM_ALL + GIT_REPOSITORY ${VCPKG_REPO} + GIT_TAG master + GIT_SHALLOW TRUE + ) + FetchContent_MakeAvailable(vcpkg) + if (WIN32) + execute_process(COMMAND "${VCPKG_SRC_DIR}/bootstrap-vcpkg.bat") + set(VCPKG_EXECUTABLE "${VCPKG_SRC_DIR}/vcpkg.exe" CACHE INTERNAL "vcpkg executable") + else() + execute_process(COMMAND bash "${VCPKG_SRC_DIR}/bootstrap-vcpkg.sh") + set(VCPKG_EXECUTABLE "${VCPKG_SRC_DIR}/vcpkg" CACHE INTERNAL "vcpkg executable") + endif() +endif() + +# custom triplets (looks like doesn't work) +#if (WIN32) +# set(VCPKG_TARGET_TRIPLET "${CMAKE_SOURCE_DIR}/cmake/x64-windows-static-triplet" CACHE STRING "VCPKG Target Triplet to use") +#elseif(UNIX) +# set(VCPKG_TARGET_TRIPLET "${CMAKE_SOURCE_DIR}/cmake/x64-linux-triplet" CACHE STRING "VCPKG Target Triplet to use") +#endif() + +if (WIN32) + # static win build breaks find_library call. need to specify FREETYPE_LIBRARY and FREETYPE_INCLUDE_DIRS manually. + # plain x64-windows will link freetype as dll instead of lib ....... + set(TRIPLET x64-windows-static) +elseif(UNIX) + set(TRIPLET x64-linux) +elseif(APPLE) + set(TRIPLET x64-osx) +else() + message(FATAL_ERROR "Unknown OS, can't build msdfgen") +endif() + +execute_process(COMMAND ${VCPKG_EXECUTABLE} install freetype:${TRIPLET}) +set(CMAKE_TOOLCHAIN_FILE "${CMAKE_BINARY_DIR}/_deps/vcpkg-src/scripts/buildsystems/vcpkg.cmake" CACHE STRING "cmake toolchain") +include("${VCPKG_SRC_DIR}/scripts/buildsystems/vcpkg.cmake") + +if(WIN32) + set(FREETYPE_LIBRARY "${VCPKG_SRC_DIR}/buildtrees/freetype/${TRIPLET}-rel/freetype.lib" CACHE STRING "freetype lib path on win") + set(FREETYPE_INCLUDE_DIRS "${VCPKG_SRC_DIR}/packages/freetype_${TRIPLET}/include" CACHE STRING "freetype include path on win") +endif() + +#find_package(Freetype REQUIRED) + +set(MSDFGEN_DISABLE_SVG TRUE CACHE INTERNAL "disable msdfgen svg") +set(MSDFGEN_DISABLE_PNG TRUE CACHE INTERNAL "disable msdfgen png") +set(MSDFGEN_USE_SKIA OFF CACHE BOOL "use skia" FORCE) + +FetchContent_Declare( + msdfgen + EXCLUDE_FROM_ALL + GIT_REPOSITORY ${MSDFGEN_REPO} + GIT_TAG v1.12 + GIT_SHALLOW TRUE +) +FetchContent_MakeAvailable(msdfgen) diff --git a/CMakeLists.txt b/CMakeLists.txt index cbc96f4..33d53a2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -118,7 +118,8 @@ endif() list(APPEND CMAKE_PREFIX_PATH ${CMAKE_BINARY_DIR}/deps/INSTALL) -target_link_libraries(openVulkanoCpp PRIVATE magic_enum yaml-cpp fmt spdlog glm pugixml stb eigen utf8cpp imgui_internal TracyClient stud-uuid ryml unordered_dense Boost::regex units) +target_link_libraries(openVulkanoCpp PRIVATE magic_enum yaml-cpp fmt spdlog glm pugixml stb eigen utf8cpp imgui_internal + TracyClient stud-uuid ryml unordered_dense Boost::regex units msdfgen::msdfgen msdfgen::msdfgen-ext) if (NOT IOS) LinkCurl(openVulkanoCpp) endif() diff --git a/openVulkanoCpp/Scene/Geometry.cpp b/openVulkanoCpp/Scene/Geometry.cpp index c2b28db..776062f 100644 --- a/openVulkanoCpp/Scene/Geometry.cpp +++ b/openVulkanoCpp/Scene/Geometry.cpp @@ -13,7 +13,7 @@ #include #include #include -//#define ASSIMP_AVAILABLE +#define ASSIMP_AVAILABLE #endif #include