Skip to content

Commit 6cffa57

Browse files
committed
Refactoring
Move large imiv source, shader and test lists out of src/imiv/CMakeLists.txt into dedicated cmake/imiv_sources.cmake and cmake/imiv_tests.cmake and include them from CMakeLists. This extracts shared_sources, platform/renderer source groups, shader embedding/custom-command helpers, font embedding logic and test registrations to improve CMake organization and readability. Also adds a number of new imiv source/header files (actions, developer tools, file actions, image library, persistence/parse, Vulkan helpers, preview shader text, probe overlay, workspace UI, etc.) referenced by the new cmake files. Signed-off-by: Vlad (Kuzmin) Erium <libalias@gmail.com>
1 parent f577608 commit 6cffa57

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

64 files changed

+8435
-8205
lines changed

src/imiv/CMakeLists.txt

Lines changed: 2 additions & 977 deletions
Large diffs are not rendered by default.

src/imiv/cmake/imiv_sources.cmake

Lines changed: 308 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,308 @@
1+
# Copyright Contributors to the OpenImageIO project.
2+
# SPDX-License-Identifier: Apache-2.0
3+
# https://github.com/AcademySoftwareFoundation/OpenImageIO
4+
5+
set (_imiv_shared_sources
6+
imiv_backend.cpp
7+
imiv_actions.cpp
8+
imiv_action_dispatch.cpp
9+
imiv_app.cpp
10+
imiv_aux_windows.cpp
11+
imiv_developer_tools.cpp
12+
imiv_file_actions.cpp
13+
imiv_file_dialog.cpp
14+
imiv_frame.cpp
15+
imiv_image_library.cpp
16+
imiv_image_view.cpp
17+
imiv_loaded_image.cpp
18+
imiv_menu.cpp
19+
imiv_navigation.cpp
20+
imiv_ocio.cpp
21+
imiv_parse.cpp
22+
imiv_persistence.cpp
23+
imiv_overlays.cpp
24+
imiv_probe_overlay.cpp
25+
imiv_preview_shader_text.cpp
26+
imiv_renderer.cpp
27+
imiv_shader_compile.cpp
28+
imiv_style.cpp
29+
imiv_tiling.cpp
30+
imiv_upload_types.cpp
31+
imiv_ui.cpp
32+
imiv_viewer.cpp
33+
imiv_workspace.cpp
34+
imiv_workspace_ui.cpp
35+
imiv_main.cpp)
36+
37+
set (_imiv_test_engine_integration_sources
38+
imiv_test_engine.cpp)
39+
40+
set (_imiv_platform_glfw_sources
41+
imiv_drag_drop.cpp
42+
imiv_platform_glfw.cpp)
43+
if (APPLE)
44+
list (APPEND _imiv_platform_glfw_sources
45+
external/dnd_glfw/dnd_glfw_macos.mm)
46+
endif ()
47+
48+
set (_imiv_renderer_vulkan_sources
49+
imiv_renderer_vulkan.cpp
50+
imiv_capture.cpp
51+
imiv_vulkan_setup.cpp
52+
imiv_vulkan_resource_utils.cpp
53+
imiv_vulkan_shader_utils.cpp
54+
imiv_vulkan_ocio.cpp
55+
imiv_vulkan_preview.cpp
56+
imiv_vulkan_runtime.cpp
57+
imiv_vulkan_texture.cpp
58+
imiv_vulkan_window.cpp)
59+
60+
set (_imiv_renderer_metal_sources
61+
imiv_renderer_metal.mm)
62+
set (_imiv_renderer_opengl_sources
63+
imiv_renderer_opengl.cpp)
64+
set (_imiv_renderer_enabled_sources)
65+
set (_imiv_core_sources)
66+
67+
set (_imiv_shader_src "${CMAKE_CURRENT_SOURCE_DIR}/shaders/imiv_upload_to_rgba.comp")
68+
set (_imiv_preview_vert_src "${CMAKE_CURRENT_SOURCE_DIR}/shaders/imiv_preview.vert")
69+
set (_imiv_preview_frag_src "${CMAKE_CURRENT_SOURCE_DIR}/shaders/imiv_preview.frag")
70+
set (_imiv_shader_spv_16f "${CMAKE_CURRENT_BINARY_DIR}/imiv_upload_to_rgba16f.comp.spv")
71+
set (_imiv_shader_spv_32f "${CMAKE_CURRENT_BINARY_DIR}/imiv_upload_to_rgba32f.comp.spv")
72+
set (_imiv_shader_spv_16f_fp64 "${CMAKE_CURRENT_BINARY_DIR}/imiv_upload_to_rgba16f_fp64.comp.spv")
73+
set (_imiv_shader_spv_32f_fp64 "${CMAKE_CURRENT_BINARY_DIR}/imiv_upload_to_rgba32f_fp64.comp.spv")
74+
set (_imiv_preview_vert_spv "${CMAKE_CURRENT_BINARY_DIR}/imiv_preview.vert.spv")
75+
set (_imiv_preview_frag_spv "${CMAKE_CURRENT_BINARY_DIR}/imiv_preview.frag.spv")
76+
set (_imiv_shader_hdr_16f "${CMAKE_CURRENT_BINARY_DIR}/imiv_upload_to_rgba16f_spv.h")
77+
set (_imiv_shader_hdr_32f "${CMAKE_CURRENT_BINARY_DIR}/imiv_upload_to_rgba32f_spv.h")
78+
set (_imiv_shader_hdr_16f_fp64 "${CMAKE_CURRENT_BINARY_DIR}/imiv_upload_to_rgba16f_fp64_spv.h")
79+
set (_imiv_shader_hdr_32f_fp64 "${CMAKE_CURRENT_BINARY_DIR}/imiv_upload_to_rgba32f_fp64_spv.h")
80+
set (_imiv_preview_vert_hdr "${CMAKE_CURRENT_BINARY_DIR}/imiv_preview_vert_spv.h")
81+
set (_imiv_preview_frag_hdr "${CMAKE_CURRENT_BINARY_DIR}/imiv_preview_frag_spv.h")
82+
set (_imiv_shader_outputs)
83+
set (_imiv_embedded_shader_headers)
84+
set (_imiv_font_ui_ttf "${PROJECT_SOURCE_DIR}/src/fonts/Droid_Sans/DroidSans.ttf")
85+
set (_imiv_font_mono_ttf "${PROJECT_SOURCE_DIR}/src/fonts/Droid_Sans_Mono/DroidSansMono.ttf")
86+
set (_imiv_font_ui_hdr "${CMAKE_CURRENT_BINARY_DIR}/imiv_font_droidsans_ttf.h")
87+
set (_imiv_font_mono_hdr "${CMAKE_CURRENT_BINARY_DIR}/imiv_font_droidsansmono_ttf.h")
88+
set (_imiv_embedded_font_headers)
89+
90+
function (_imiv_add_embedded_spirv_header input_spv output_hdr symbol_name)
91+
add_custom_command (
92+
OUTPUT "${output_hdr}"
93+
COMMAND ${CMAKE_COMMAND}
94+
-DINPUT="${input_spv}"
95+
-DOUTPUT="${output_hdr}"
96+
-DSYMBOL_NAME="${symbol_name}"
97+
-P "${CMAKE_CURRENT_SOURCE_DIR}/embed_spirv_header.cmake"
98+
DEPENDS
99+
"${input_spv}"
100+
"${CMAKE_CURRENT_SOURCE_DIR}/embed_spirv_header.cmake"
101+
COMMENT "imiv: embedding Vulkan shader ${symbol_name}")
102+
endfunction ()
103+
104+
function (_imiv_add_embedded_binary_header input_bin output_hdr symbol_name)
105+
add_custom_command (
106+
OUTPUT "${output_hdr}"
107+
COMMAND ${CMAKE_COMMAND}
108+
-DINPUT="${input_bin}"
109+
-DOUTPUT="${output_hdr}"
110+
-DSYMBOL_NAME="${symbol_name}"
111+
-P "${CMAKE_CURRENT_SOURCE_DIR}/embed_binary_header.cmake"
112+
DEPENDS
113+
"${input_bin}"
114+
"${CMAKE_CURRENT_SOURCE_DIR}/embed_binary_header.cmake"
115+
COMMENT "imiv: embedding binary asset ${symbol_name}")
116+
endfunction ()
117+
118+
if (OIIO_IMIV_EMBED_FONTS)
119+
if (NOT EXISTS "${_imiv_font_ui_ttf}" OR NOT EXISTS "${_imiv_font_mono_ttf}")
120+
message (FATAL_ERROR
121+
"imiv: OIIO_IMIV_EMBED_FONTS=ON requires ${_imiv_font_ui_ttf} and ${_imiv_font_mono_ttf}")
122+
endif ()
123+
_imiv_add_embedded_binary_header ("${_imiv_font_ui_ttf}"
124+
"${_imiv_font_ui_hdr}"
125+
"g_imiv_font_droidsans_ttf")
126+
_imiv_add_embedded_binary_header ("${_imiv_font_mono_ttf}"
127+
"${_imiv_font_mono_hdr}"
128+
"g_imiv_font_droidsansmono_ttf")
129+
list (APPEND _imiv_embedded_font_headers
130+
"${_imiv_font_ui_hdr}"
131+
"${_imiv_font_mono_hdr}")
132+
endif ()
133+
134+
if (_imiv_want_vulkan)
135+
find_program (OIIO_IMIV_GLSLC_EXECUTABLE
136+
NAMES glslc
137+
HINTS
138+
"${OIIO_IMIV_VULKAN_SDK}/bin")
139+
if (OIIO_IMIV_GLSLC_EXECUTABLE AND EXISTS "${_imiv_shader_src}")
140+
add_custom_command (
141+
OUTPUT "${_imiv_shader_spv_16f}"
142+
COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CURRENT_BINARY_DIR}"
143+
COMMAND ${OIIO_IMIV_GLSLC_EXECUTABLE}
144+
-fshader-stage=comp
145+
-DIMIV_OUTPUT_16F=1
146+
-DIMIV_ENABLE_FP64=0
147+
-O
148+
"${_imiv_shader_src}"
149+
-o "${_imiv_shader_spv_16f}"
150+
DEPENDS "${_imiv_shader_src}"
151+
COMMENT "imiv: compiling Vulkan compute shader (rgba16f)")
152+
add_custom_command (
153+
OUTPUT "${_imiv_shader_spv_32f}"
154+
COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CURRENT_BINARY_DIR}"
155+
COMMAND ${OIIO_IMIV_GLSLC_EXECUTABLE}
156+
-fshader-stage=comp
157+
-DIMIV_OUTPUT_16F=0
158+
-DIMIV_ENABLE_FP64=0
159+
-O
160+
"${_imiv_shader_src}"
161+
-o "${_imiv_shader_spv_32f}"
162+
DEPENDS "${_imiv_shader_src}"
163+
COMMENT "imiv: compiling Vulkan compute shader (rgba32f)")
164+
add_custom_command (
165+
OUTPUT "${_imiv_shader_spv_16f_fp64}"
166+
COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CURRENT_BINARY_DIR}"
167+
COMMAND ${OIIO_IMIV_GLSLC_EXECUTABLE}
168+
-fshader-stage=comp
169+
-DIMIV_OUTPUT_16F=1
170+
-DIMIV_ENABLE_FP64=1
171+
-O
172+
"${_imiv_shader_src}"
173+
-o "${_imiv_shader_spv_16f_fp64}"
174+
DEPENDS "${_imiv_shader_src}"
175+
COMMENT "imiv: compiling Vulkan compute shader (rgba16f, fp64)")
176+
add_custom_command (
177+
OUTPUT "${_imiv_shader_spv_32f_fp64}"
178+
COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CURRENT_BINARY_DIR}"
179+
COMMAND ${OIIO_IMIV_GLSLC_EXECUTABLE}
180+
-fshader-stage=comp
181+
-DIMIV_OUTPUT_16F=0
182+
-DIMIV_ENABLE_FP64=1
183+
-O
184+
"${_imiv_shader_src}"
185+
-o "${_imiv_shader_spv_32f_fp64}"
186+
DEPENDS "${_imiv_shader_src}"
187+
COMMENT "imiv: compiling Vulkan compute shader (rgba32f, fp64)")
188+
add_custom_command (
189+
OUTPUT "${_imiv_preview_vert_spv}"
190+
COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CURRENT_BINARY_DIR}"
191+
COMMAND ${OIIO_IMIV_GLSLC_EXECUTABLE}
192+
-fshader-stage=vert
193+
-O
194+
"${_imiv_preview_vert_src}"
195+
-o "${_imiv_preview_vert_spv}"
196+
DEPENDS "${_imiv_preview_vert_src}"
197+
COMMENT "imiv: compiling Vulkan preview vertex shader")
198+
add_custom_command (
199+
OUTPUT "${_imiv_preview_frag_spv}"
200+
COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CURRENT_BINARY_DIR}"
201+
COMMAND ${OIIO_IMIV_GLSLC_EXECUTABLE}
202+
-fshader-stage=frag
203+
-O
204+
"${_imiv_preview_frag_src}"
205+
-o "${_imiv_preview_frag_spv}"
206+
DEPENDS "${_imiv_preview_frag_src}"
207+
COMMENT "imiv: compiling Vulkan preview fragment shader")
208+
_imiv_add_embedded_spirv_header (
209+
"${_imiv_shader_spv_16f}"
210+
"${_imiv_shader_hdr_16f}"
211+
"g_imiv_upload_to_rgba16f_spv")
212+
_imiv_add_embedded_spirv_header (
213+
"${_imiv_shader_spv_32f}"
214+
"${_imiv_shader_hdr_32f}"
215+
"g_imiv_upload_to_rgba32f_spv")
216+
_imiv_add_embedded_spirv_header (
217+
"${_imiv_shader_spv_16f_fp64}"
218+
"${_imiv_shader_hdr_16f_fp64}"
219+
"g_imiv_upload_to_rgba16f_fp64_spv")
220+
_imiv_add_embedded_spirv_header (
221+
"${_imiv_shader_spv_32f_fp64}"
222+
"${_imiv_shader_hdr_32f_fp64}"
223+
"g_imiv_upload_to_rgba32f_fp64_spv")
224+
_imiv_add_embedded_spirv_header (
225+
"${_imiv_preview_vert_spv}"
226+
"${_imiv_preview_vert_hdr}"
227+
"g_imiv_preview_vert_spv")
228+
_imiv_add_embedded_spirv_header (
229+
"${_imiv_preview_frag_spv}"
230+
"${_imiv_preview_frag_hdr}"
231+
"g_imiv_preview_frag_spv")
232+
set (_imiv_shader_outputs
233+
"${_imiv_shader_spv_16f}"
234+
"${_imiv_shader_spv_32f}"
235+
"${_imiv_shader_spv_16f_fp64}"
236+
"${_imiv_shader_spv_32f_fp64}"
237+
"${_imiv_preview_vert_spv}"
238+
"${_imiv_preview_frag_spv}")
239+
set (_imiv_embedded_shader_headers
240+
"${_imiv_shader_hdr_16f}"
241+
"${_imiv_shader_hdr_32f}"
242+
"${_imiv_shader_hdr_16f_fp64}"
243+
"${_imiv_shader_hdr_32f_fp64}"
244+
"${_imiv_preview_vert_hdr}"
245+
"${_imiv_preview_frag_hdr}")
246+
add_custom_target (imiv_shaders DEPENDS
247+
${_imiv_shader_outputs}
248+
${_imiv_embedded_shader_headers})
249+
else ()
250+
message (STATUS
251+
"imiv: glslc not found; Vulkan compute upload shader generation disabled")
252+
endif ()
253+
endif ()
254+
255+
set (_imiv_imgui_sources
256+
"${OIIO_IMIV_IMGUI_ROOT}/imgui.cpp"
257+
"${OIIO_IMIV_IMGUI_ROOT}/imgui_demo.cpp"
258+
"${OIIO_IMIV_IMGUI_ROOT}/imgui_draw.cpp"
259+
"${OIIO_IMIV_IMGUI_ROOT}/imgui_tables.cpp"
260+
"${OIIO_IMIV_IMGUI_ROOT}/imgui_widgets.cpp"
261+
"${OIIO_IMIV_IMGUI_ROOT}/backends/imgui_impl_glfw.cpp"
262+
${_imiv_imgui_renderer_sources})
263+
264+
set (_imiv_test_engine_sources)
265+
set (_imiv_test_engine_dir "")
266+
if (OIIO_IMIV_ENABLE_IMGUI_TEST_ENGINE)
267+
if (OIIO_IMIV_TEST_ENGINE_ROOT)
268+
if (EXISTS "${OIIO_IMIV_TEST_ENGINE_ROOT}/imgui_te_engine.h")
269+
set (_imiv_test_engine_dir "${OIIO_IMIV_TEST_ENGINE_ROOT}")
270+
elseif (EXISTS
271+
"${OIIO_IMIV_TEST_ENGINE_ROOT}/imgui_test_engine/imgui_te_engine.h")
272+
set (_imiv_test_engine_dir "${OIIO_IMIV_TEST_ENGINE_ROOT}/imgui_test_engine")
273+
endif ()
274+
elseif (DEFINED ENV{IMGUI_TEST_ENGINE_ROOT}
275+
AND NOT "$ENV{IMGUI_TEST_ENGINE_ROOT}" STREQUAL "")
276+
if (EXISTS "$ENV{IMGUI_TEST_ENGINE_ROOT}/imgui_te_engine.h")
277+
set (_imiv_test_engine_dir "$ENV{IMGUI_TEST_ENGINE_ROOT}")
278+
elseif (EXISTS
279+
"$ENV{IMGUI_TEST_ENGINE_ROOT}/imgui_test_engine/imgui_te_engine.h")
280+
set (_imiv_test_engine_dir "$ENV{IMGUI_TEST_ENGINE_ROOT}/imgui_test_engine")
281+
endif ()
282+
endif ()
283+
284+
if (_imiv_test_engine_dir)
285+
set (_imiv_test_engine_sources
286+
"${_imiv_test_engine_dir}/imgui_te_context.cpp"
287+
"${_imiv_test_engine_dir}/imgui_te_coroutine.cpp"
288+
"${_imiv_test_engine_dir}/imgui_te_engine.cpp"
289+
"${_imiv_test_engine_dir}/imgui_te_exporters.cpp"
290+
"${_imiv_test_engine_dir}/imgui_te_perftool.cpp"
291+
"${_imiv_test_engine_dir}/imgui_te_ui.cpp"
292+
"${_imiv_test_engine_dir}/imgui_te_utils.cpp"
293+
"${_imiv_test_engine_dir}/imgui_capture_tool.cpp")
294+
record_build_dependency (ImGuiTestEngine FOUND)
295+
else ()
296+
record_build_dependency (
297+
ImGuiTestEngine NOTFOUND
298+
NOT_FOUND_EXPLANATION
299+
"(sources not found under ${OIIO_IMIV_TEST_ENGINE_ROOT})")
300+
message (STATUS
301+
"imiv: Dear ImGui Test Engine not found; test automation support will be disabled")
302+
endif ()
303+
else ()
304+
record_build_dependency (
305+
ImGuiTestEngine NOTFOUND
306+
NOT_FOUND_EXPLANATION
307+
"(disabled by OIIO_IMIV_ENABLE_IMGUI_TEST_ENGINE=OFF)")
308+
endif ()

0 commit comments

Comments
 (0)