@@ -22,6 +22,8 @@ set (OIIO_IMIV_GLSLANG_DEFAULT_LIMITS_LIBRARY "" CACHE FILEPATH
2222 "Optional explicit glslang-default-resource-limits library path for imiv runtime shader compilation" )
2323option (OIIO_IMIV_USE_NATIVEFILEDIALOG
2424 "Use nativefiledialog-extended for imiv file open/save actions" ON )
25+ option (OIIO_IMIV_EMBED_FONTS
26+ "Embed imiv UI and mono fonts into the binary" ON )
2527option (OIIO_IMIV_ENABLE_IMGUI_TEST_ENGINE
2628 "Build imiv with Dear ImGui Test Engine integration when sources are available" ON )
2729option (OIIO_IMIV_ADD_UPLOAD_SMOKE_CTEST
@@ -228,6 +230,11 @@ set (_imiv_preview_vert_hdr "${CMAKE_CURRENT_BINARY_DIR}/imiv_preview_vert_spv.h
228230set (_imiv_preview_frag_hdr "${CMAKE_CURRENT_BINARY_DIR} /imiv_preview_frag_spv.h" )
229231set (_imiv_shader_outputs)
230232set (_imiv_embedded_shader_headers)
233+ set (_imiv_font_ui_ttf "${PROJECT_SOURCE_DIR} /src/fonts/Droid_Sans/DroidSans.ttf" )
234+ set (_imiv_font_mono_ttf "${PROJECT_SOURCE_DIR} /src/fonts/Droid_Sans_Mono/DroidSansMono.ttf" )
235+ set (_imiv_font_ui_hdr "${CMAKE_CURRENT_BINARY_DIR} /imiv_font_droidsans_ttf.h" )
236+ set (_imiv_font_mono_hdr "${CMAKE_CURRENT_BINARY_DIR} /imiv_font_droidsansmono_ttf.h" )
237+ set (_imiv_embedded_font_headers)
231238
232239function (_imiv_add_embedded_spirv_header input_spv output_hdr symbol_name )
233240 add_custom_command (
@@ -243,6 +250,36 @@ function (_imiv_add_embedded_spirv_header input_spv output_hdr symbol_name)
243250 COMMENT "imiv: embedding Vulkan shader ${symbol_name} " )
244251endfunction ()
245252
253+ function (_imiv_add_embedded_binary_header input_bin output_hdr symbol_name )
254+ add_custom_command (
255+ OUTPUT "${output_hdr} "
256+ COMMAND ${CMAKE_COMMAND}
257+ -DINPUT= "${input_bin} "
258+ -DOUTPUT= "${output_hdr} "
259+ -DSYMBOL_NAME= "${symbol_name} "
260+ -P "${CMAKE_CURRENT_SOURCE_DIR} /embed_binary_header.cmake"
261+ DEPENDS
262+ "${input_bin} "
263+ "${CMAKE_CURRENT_SOURCE_DIR} /embed_binary_header.cmake"
264+ COMMENT "imiv: embedding binary asset ${symbol_name} " )
265+ endfunction ()
266+
267+ if (OIIO_IMIV_EMBED_FONTS)
268+ if (NOT EXISTS "${_imiv_font_ui_ttf} " OR NOT EXISTS "${_imiv_font_mono_ttf} " )
269+ message (FATAL_ERROR
270+ "imiv: OIIO_IMIV_EMBED_FONTS=ON requires ${_imiv_font_ui_ttf} and ${_imiv_font_mono_ttf} " )
271+ endif ()
272+ _imiv_add_embedded_binary_header ("${_imiv_font_ui_ttf} "
273+ "${_imiv_font_ui_hdr} "
274+ "g_imiv_font_droidsans_ttf" )
275+ _imiv_add_embedded_binary_header ("${_imiv_font_mono_ttf} "
276+ "${_imiv_font_mono_hdr} "
277+ "g_imiv_font_droidsansmono_ttf" )
278+ list (APPEND _imiv_embedded_font_headers
279+ "${_imiv_font_ui_hdr} "
280+ "${_imiv_font_mono_hdr} " )
281+ endif ()
282+
246283if (_imiv_want_vulkan)
247284 find_program (OIIO_IMIV_GLSLC_EXECUTABLE
248285 NAMES glslc
@@ -815,6 +852,7 @@ endif ()
815852set (IMIV_WITH_VULKAN 0)
816853set (IMIV_WITH_METAL 0)
817854set (IMIV_WITH_OPENGL 0)
855+ set (IMIV_EMBED_FONTS 0)
818856set (IMIV_BUILD_DEFAULT_BACKEND_KIND -1)
819857if (_imiv_enabled_vulkan)
820858 set (IMIV_WITH_VULKAN 1)
@@ -825,6 +863,9 @@ endif ()
825863if (_imiv_enabled_opengl)
826864 set (IMIV_WITH_OPENGL 1)
827865endif ()
866+ if (OIIO_IMIV_EMBED_FONTS)
867+ set (IMIV_EMBED_FONTS 1)
868+ endif ()
828869if (_imiv_renderer_is_vulkan)
829870 set (IMIV_BUILD_DEFAULT_BACKEND_KIND 0)
830871elseif (_imiv_renderer_is_metal)
@@ -860,7 +901,8 @@ set (_imiv_core_sources
860901 ${_imiv_shared_sources}
861902 ${_imiv_test_engine_integration_sources}
862903 ${_imiv_platform_glfw_sources}
863- ${_imiv_renderer_enabled_sources} )
904+ ${_imiv_renderer_enabled_sources}
905+ ${_imiv_embedded_font_headers} )
864906
865907set (_imiv_imgui_renderer_sources)
866908if (_imiv_enabled_vulkan)
@@ -1016,40 +1058,38 @@ if (TARGET imiv)
10161058 target_compile_definitions (imiv PRIVATE IMIV_HAS_NFD=0 )
10171059 endif ()
10181060
1019- add_custom_command (
1020- TARGET imiv POST_BUILD
1021- COMMAND ${CMAKE_COMMAND} -E make_directory
1022- "$<TARGET_FILE_DIR :imiv >/fonts/Droid_Sans"
1023- COMMAND ${CMAKE_COMMAND} -E make_directory
1024- "$<TARGET_FILE_DIR :imiv >/fonts/Droid_Sans_Mono"
1025- COMMAND ${CMAKE_COMMAND} -E copy_if_different
1026- "${PROJECT_SOURCE_DIR} /src/fonts/Droid_Sans/DroidSans.ttf"
1027- "$<TARGET_FILE_DIR :imiv >/fonts/Droid_Sans/DroidSans.ttf"
1028- COMMAND ${CMAKE_COMMAND} -E copy_if_different
1029- "${PROJECT_SOURCE_DIR} /src/fonts/Droid_Sans/DroidSans-Bold.ttf"
1030- "$<TARGET_FILE_DIR :imiv >/fonts/Droid_Sans/DroidSans-Bold.ttf"
1031- COMMAND ${CMAKE_COMMAND} -E copy_if_different
1032- "${PROJECT_SOURCE_DIR} /src/fonts/Droid_Sans/droid-lic.txt"
1033- "$<TARGET_FILE_DIR :imiv >/fonts/Droid_Sans/droid-lic.txt"
1034- COMMAND ${CMAKE_COMMAND} -E copy_if_different
1035- "${PROJECT_SOURCE_DIR} /src/fonts/Droid_Sans_Mono/DroidSansMono.ttf"
1036- "$<TARGET_FILE_DIR :imiv >/fonts/Droid_Sans_Mono/DroidSansMono.ttf"
1037- COMMAND ${CMAKE_COMMAND} -E copy_if_different
1038- "${PROJECT_SOURCE_DIR} /src/fonts/Droid_Sans_Mono/droid-lic.txt"
1039- "$<TARGET_FILE_DIR :imiv >/fonts/Droid_Sans_Mono/droid-lic.txt"
1040- VERBATIM )
1041-
1042- install (FILES
1043- "${PROJECT_SOURCE_DIR} /src/fonts/Droid_Sans/DroidSans.ttf"
1044- "${PROJECT_SOURCE_DIR} /src/fonts/Droid_Sans/DroidSans-Bold.ttf"
1045- "${PROJECT_SOURCE_DIR} /src/fonts/Droid_Sans/droid-lic.txt"
1046- DESTINATION
1047- "${CMAKE_INSTALL_BINDIR} /fonts/Droid_Sans" )
1048- install (FILES
1049- "${PROJECT_SOURCE_DIR} /src/fonts/Droid_Sans_Mono/DroidSansMono.ttf"
1050- "${PROJECT_SOURCE_DIR} /src/fonts/Droid_Sans_Mono/droid-lic.txt"
1051- DESTINATION
1052- "${CMAKE_INSTALL_BINDIR} /fonts/Droid_Sans_Mono" )
1061+ if (NOT OIIO_IMIV_EMBED_FONTS)
1062+ add_custom_command (
1063+ TARGET imiv POST_BUILD
1064+ COMMAND ${CMAKE_COMMAND} -E make_directory
1065+ "$<TARGET_FILE_DIR :imiv >/fonts/Droid_Sans"
1066+ COMMAND ${CMAKE_COMMAND} -E make_directory
1067+ "$<TARGET_FILE_DIR :imiv >/fonts/Droid_Sans_Mono"
1068+ COMMAND ${CMAKE_COMMAND} -E copy_if_different
1069+ "${PROJECT_SOURCE_DIR} /src/fonts/Droid_Sans/DroidSans.ttf"
1070+ "$<TARGET_FILE_DIR :imiv >/fonts/Droid_Sans/DroidSans.ttf"
1071+ COMMAND ${CMAKE_COMMAND} -E copy_if_different
1072+ "${PROJECT_SOURCE_DIR} /src/fonts/Droid_Sans/droid-lic.txt"
1073+ "$<TARGET_FILE_DIR :imiv >/fonts/Droid_Sans/droid-lic.txt"
1074+ COMMAND ${CMAKE_COMMAND} -E copy_if_different
1075+ "${PROJECT_SOURCE_DIR} /src/fonts/Droid_Sans_Mono/DroidSansMono.ttf"
1076+ "$<TARGET_FILE_DIR :imiv >/fonts/Droid_Sans_Mono/DroidSansMono.ttf"
1077+ COMMAND ${CMAKE_COMMAND} -E copy_if_different
1078+ "${PROJECT_SOURCE_DIR} /src/fonts/Droid_Sans_Mono/droid-lic.txt"
1079+ "$<TARGET_FILE_DIR :imiv >/fonts/Droid_Sans_Mono/droid-lic.txt"
1080+ VERBATIM )
1081+
1082+ install (FILES
1083+ "${PROJECT_SOURCE_DIR} /src/fonts/Droid_Sans/DroidSans.ttf"
1084+ "${PROJECT_SOURCE_DIR} /src/fonts/Droid_Sans/droid-lic.txt"
1085+ DESTINATION
1086+ "${CMAKE_INSTALL_BINDIR} /fonts/Droid_Sans" )
1087+ install (FILES
1088+ "${PROJECT_SOURCE_DIR} /src/fonts/Droid_Sans_Mono/DroidSansMono.ttf"
1089+ "${PROJECT_SOURCE_DIR} /src/fonts/Droid_Sans_Mono/droid-lic.txt"
1090+ DESTINATION
1091+ "${CMAKE_INSTALL_BINDIR} /fonts/Droid_Sans_Mono" )
1092+ endif ()
10531093endif ()
10541094
10551095if (MSVC )
@@ -1430,6 +1470,24 @@ if (TARGET imiv
14301470 LABELS "imiv;gui;imiv_multiview"
14311471 TIMEOUT 180 )
14321472
1473+ if (TARGET oiiotool)
1474+ add_test (
1475+ NAME imiv_image_list_center_regression
1476+ COMMAND
1477+ "${Python3_EXECUTABLE} "
1478+ "${CMAKE_CURRENT_SOURCE_DIR} /tools/imiv_image_list_center_regression.py"
1479+ --bin "$<TARGET_FILE :imiv >"
1480+ --cwd "$<TARGET_FILE_DIR :imiv >"
1481+ --backend opengl
1482+ --oiiotool "$<TARGET_FILE :oiiotool >"
1483+ --env-script "${CMAKE_BINARY_DIR} /imiv_env.sh"
1484+ --out-dir "${CMAKE_BINARY_DIR} /imiv_captures/image_list_center_regression" )
1485+ set_tests_properties (
1486+ imiv_image_list_center_regression PROPERTIES
1487+ LABELS "imiv;gui;imiv_multiview"
1488+ TIMEOUT 180 )
1489+ endif ()
1490+
14331491 add_test (
14341492 NAME imiv_drag_drop_regression
14351493 COMMAND
0 commit comments