From ec8e2643ff7c55d896dfe04dd7cbcc6ce6b93960 Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Sun, 1 Aug 2021 21:15:17 -0500 Subject: [PATCH] Add freetype-gl for SDF fonts --- .gitmodules | 3 ++ CMakeLists.txt | 1 + external/CMakeLists.txt | 2 + external/freetype-gl | 1 + external/freetype-gl.cmake | 100 +++++++++++++++++++++++++++++++++++++ 5 files changed, 107 insertions(+) create mode 160000 external/freetype-gl create mode 100644 external/freetype-gl.cmake diff --git a/.gitmodules b/.gitmodules index 3183b128..81c8ed32 100644 --- a/.gitmodules +++ b/.gitmodules @@ -10,3 +10,6 @@ [submodule "external/hsluv-c"] path = external/hsluv-c url = https://github.com/hsluv/hsluv-c.git +[submodule "external/freetype-gl"] + path = external/freetype-gl + url = https://github.com/rougier/freetype-gl.git diff --git a/CMakeLists.txt b/CMakeLists.txt index 51d6002f..49ddcb66 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,6 +15,7 @@ include(${PROJECT_SOURCE_DIR}/external/cmake-conan/conan.cmake) conan_cmake_configure(REQUIRES boost/1.76.0 freetype/2.10.4 geographiclib/1.52 + glew/2.2.0 glm/0.9.9.8 gtest/cci.20210126 openssl/1.1.1k diff --git a/external/CMakeLists.txt b/external/CMakeLists.txt index d134523d..37fbfe4c 100644 --- a/external/CMakeLists.txt +++ b/external/CMakeLists.txt @@ -4,8 +4,10 @@ set(PROJECT_NAME scwx-external) set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS + freetype-gl.cmake hsluv-c.cmake mapbox-gl-native.cmake) +include(freetype-gl.cmake) include(hsluv-c.cmake) include(mapbox-gl-native.cmake) diff --git a/external/freetype-gl b/external/freetype-gl new file mode 160000 index 00000000..1cbe5518 --- /dev/null +++ b/external/freetype-gl @@ -0,0 +1 @@ +Subproject commit 1cbe5518844db279174b24e6529135870c396744 diff --git a/external/freetype-gl.cmake b/external/freetype-gl.cmake new file mode 100644 index 00000000..5f46a26b --- /dev/null +++ b/external/freetype-gl.cmake @@ -0,0 +1,100 @@ +cmake_minimum_required(VERSION 3.11) +set(PROJECT_NAME scwx-freetype-gl) + +find_package(OpenGL REQUIRED) +find_package(Freetype REQUIRED) +find_package(GLEW REQUIRED) + +set(freetype-gl_WITH_GLEW ON) +set(freetype-gl_WITH_GLAD OFF) +set(freetype-gl_USE_VAO ON) +set(freetype-gl_BUILD_DEMOS OFF) +set(freetype-gl_BUILD_APIDOC ON) +set(freetype-gl_BUILD_HARFBUZZ OFF) +set(freetype-gl_BUILD_MAKEFONT ON) +set(freetype-gl_BUILD_TESTS OFF) +set(freetype-gl_BUILD_SHARED OFF) + +set(FREETYPE_GL_HDR freetype-gl/distance-field.h + freetype-gl/edtaa3func.h + freetype-gl/font-manager.h + freetype-gl/freetype-gl.h + freetype-gl/markup.h + freetype-gl/opengl.h + freetype-gl/platform.h + freetype-gl/text-buffer.h + freetype-gl/texture-atlas.h + freetype-gl/texture-font.h + freetype-gl/utf8-utils.h + freetype-gl/ftgl-utils.h + freetype-gl/vec234.h + freetype-gl/vector.h + freetype-gl/vertex-attribute.h + freetype-gl/vertex-buffer.h + freetype-gl/freetype-gl-errdef.h) +set(FREETYPE_GL_SRC freetype-gl/distance-field.c + freetype-gl/edtaa3func.c + freetype-gl/font-manager.c + freetype-gl/platform.c + freetype-gl/text-buffer.c + freetype-gl/texture-atlas.c + freetype-gl/texture-font.c + freetype-gl/utf8-utils.c + freetype-gl/ftgl-utils.c + freetype-gl/vector.c + freetype-gl/vertex-attribute.c + freetype-gl/vertex-buffer.c) + +include(CheckLibraryExists) +check_library_exists(m cos "" HAVE_MATH_LIBRARY) + +if(HAVE_MATH_LIBRARY) + list(APPEND CMAKE_REQUIRED_LIBRARIES m) + set(MATH_LIBRARY m) +endif() + +if(freetype-gl_BUILD_APIDOC) + add_subdirectory(freetype-gl/doc) +endif() + +if(freetype-gl_BUILD_SHARED) + add_library(freetype-gl SHARED ${FREETYPE_GL_SRC} + ${FREETYPE_GL_HDR}) + set_target_properties(freetype-gl PROPERTIES VERSION 0.3.2 SOVERSION 0) + target_link_libraries(freetype-gl PRIVATE opengl::opengl + Freetype::Freetype + ${MATH_LIBRARY} + GLEW::GLEW) +else() + add_library(freetype-gl STATIC ${FREETYPE_GL_SRC} + ${FREETYPE_GL_HDR}) + target_link_libraries(freetype-gl PUBLIC opengl::opengl + Freetype::Freetype + ${MATH_LIBRARY} + GLEW::GLEW) +endif() + +if(freetype-gl_BUILD_MAKEFONT) + add_executable(makefont freetype-gl/makefont.c) + target_link_libraries(makefont freetype-gl + GLEW::GLEW) +endif() + +if(freetype-gl_USE_VAO) + target_compile_definitions(freetype-gl PRIVATE FREETYPE_GL_USE_VAO) + target_compile_definitions(makefont PRIVATE FREETYPE_GL_USE_VAO) +endif(freetype-gl_USE_VAO) + +if(MSVC) + target_compile_definitions(freetype-gl PRIVATE _CRT_SECURE_NO_WARNINGS _CRT_NONSTDC_NO_DEPRECATE) + target_compile_definitions(makefont PRIVATE _CRT_SECURE_NO_WARNINGS _CRT_NONSTDC_NO_DEPRECATE) +endif(MSVC) + +set(FTGL_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR} PARENT_SCOPE) + +set_target_properties(doc PROPERTIES EXCLUDE_FROM_ALL True) +set_target_properties(makefont PROPERTIES EXCLUDE_FROM_ALL True) + +set_target_properties(freetype-gl PROPERTIES FOLDER ftgl) +set_target_properties(makefont PROPERTIES FOLDER ftgl) +set_target_properties(doc PROPERTIES FOLDER ftgl)