-
Notifications
You must be signed in to change notification settings - Fork 663
Dear ImGui port of Image Viewer (imiv) with Vulkan/Metal/OpenGL backends for Windowns/Linux/MacOS #5125
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Dear ImGui port of Image Viewer (imiv) with Vulkan/Metal/OpenGL backends for Windowns/Linux/MacOS #5125
Changes from all commits
d15e17e
f95b0c3
4debaa1
304e51d
64cb1c4
932b7e0
5162e80
22d0007
39ff776
738e3df
3617c1c
8c09bc6
c83ef5e
64225cd
2e07465
6421305
c95b4d5
cc8d120
4933f6d
30e9bc2
ea1820b
61a57a7
ea44c3f
ccc4039
fae7a3d
4352e73
3d1cf90
55807a4
2b9fd0c
d3929d4
9b56e2b
3d49f5c
bd3b956
284e2b3
a9fb445
7630cfc
aa2bd86
9897658
ceefa5c
7d02d63
6d19f4b
a5a97b9
899d5de
11d1b6c
317a79e
6cb7e0f
e4c2abb
3a9fdc1
8bbee37
1b7b4f6
e8b72c2
6e77a93
31c5f6a
5d4014d
094dcc7
2f2e2b5
115a46a
ef2b36e
a0af318
6f20ebf
c12708b
5909833
77f570f
31608f8
086bf40
b34b2d8
498c5e5
eb7277b
9ef83fd
f4c957f
bf63340
b74cf4b
3030249
f1270a1
d233608
ded4bda
4209138
656c857
bb12115
db24e34
dabbe0b
ade6ab6
432d51f
c09eaf9
20d4f09
e04de46
5371c00
89a9972
401f4a5
c31f3c3
2b832d0
80cd45a
bf3e4ea
ea6b83b
5928f67
17f8432
a87b7ce
9771123
f0a7bdd
abd9714
4717032
12323d1
c24a821
6283da6
3a3dd20
1485d3b
2060a57
37a8983
7390857
52d1d0c
654b417
e8f6750
296d490
6c625be
42dfb13
d4082c1
78880b5
33663a2
44d8d25
233f6d5
decb035
2eb501a
d9cd996
a1152d0
ed9381f
0e38b9c
854911e
e3e4c36
5ba4809
43b26a1
3f1885f
eb7cd05
af9bb5e
eaf9ea7
fb14c05
5a849a6
491c15d
f38ebc0
e21f477
c36a856
36a78f4
e68bfaa
88ace10
94175cc
83c5aca
d43c964
a8ee770
f4713e4
4bc70ba
a6c6703
e9bcb29
0619a60
dad1ed0
26b6ef9
9987653
9bc57b0
4029cd9
665fcc9
5f57cef
e2043f2
e61150b
2fd6545
45bb154
5c2bb04
6e5431d
bb10537
b92b914
efd17bb
d109eff
8bbe7f6
57d8072
17cac45
983e5cf
5305907
3b7dd38
9468448
2aab8c5
d01278a
86ec1e3
a6bc579
1bd6c6c
8d7d13c
3ade3aa
13b0577
5bba433
e8ca467
365fd5e
c00b6f1
c5c81ee
e5b8abe
616196d
cedeada
23fda9b
cde0edb
fb74686
7a4fd07
e42617d
b5f2ee9
55ff96a
12ab581
dc36672
6d34a14
5d4ed73
c35ee20
a995251
92d3519
fcccf14
895bdfc
b5bf77b
73c822f
55977ce
3fb7266
9dd2c13
1ad087c
471ab7e
9dc100d
eacd42e
3f01b40
45d897e
337ed58
16006e9
c4b5d39
3ef50d9
b51530c
bb16941
cb4de5c
9211c8c
b682ec1
155cb03
9a7e4a0
295effe
4e5a67d
6a0f526
5874180
db4060f
838003e
b211645
b6b9e2f
b6b1aad
d9652cd
53e1f80
2302fca
27e95f6
6235eae
6a86bfa
8f9a1c9
51f63a8
2f271a0
b351a0e
2f391ee
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -30,3 +30,5 @@ gastest.o | |
| /*.log | ||
|
|
||
|
|
||
| /build_* | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Why does this file change? |
||
| /bld | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -285,6 +285,7 @@ if (OIIO_BUILD_TOOLS AND NOT BUILD_OIIOUTIL_ONLY) | |
| add_subdirectory (src/idiff) | ||
| add_subdirectory (src/igrep) | ||
| add_subdirectory (src/iinfo) | ||
| add_subdirectory (src/imiv) | ||
| add_subdirectory (src/maketx) | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This line is fine, but about 10 lines higher up, you probably need an ENABLE_imiv switch for the SKBUILD case. (GitHub reviews unfortunately do not line you add comments to code that didn't change, even if you are just trying to point a place that SHOULD have changed!) |
||
| add_subdirectory (src/oiiotool) | ||
| add_subdirectory (src/testtex) | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,5 +1,4 @@ | ||
| Policy on AI Coding Assistants | ||
| ============================== | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This is one of several spots where something unrelated to this PR seems to have changed for no reason. |
||
|
|
||
| - Initial policy merged 23-Mar-2026 | ||
|
|
||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -51,6 +51,7 @@ set_option (${PROJECT_NAME}_DEPENDENCY_BUILD_ALLOW_UNVERIFIED_TAGS | |
| # Track all build deps we find with checked_find_package | ||
| set (CFP_ALL_BUILD_DEPS_FOUND "") | ||
| set (CFP_EXTERNAL_BUILD_DEPS_FOUND "") | ||
| set (CFP_CUSTOM_BUILD_DEPS_FOUND "") | ||
|
|
||
| # Track all build deps we failed to find with checked_find_package | ||
| set (CFP_ALL_BUILD_DEPS_NOTFOUND "") | ||
|
|
@@ -81,6 +82,44 @@ endfunction () | |
|
|
||
|
|
||
|
|
||
| # Helper: record the final status of a dependency that is discovered outside | ||
| # checked_find_package(), so it still shows up in the dependency summary. | ||
| macro (record_build_dependency pkgname) | ||
| cmake_parse_arguments(_pkg | ||
| "FOUND;NOTFOUND;REQUIRED" | ||
| "VERSION;NOT_FOUND_EXPLANATION" | ||
| "" | ||
|
Comment on lines
+85
to
+91
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. What's with all the changes here? |
||
| ${ARGN}) | ||
| if ((_pkg_FOUND AND _pkg_NOTFOUND) | ||
| OR (NOT _pkg_FOUND AND NOT _pkg_NOTFOUND)) | ||
| message (FATAL_ERROR | ||
| "record_build_dependency(${pkgname}) requires exactly one of FOUND or NOTFOUND") | ||
| endif () | ||
| set (_pkg_version "") | ||
| set (_pkg_not_found_explanation "") | ||
| if (DEFINED _pkg_VERSION) | ||
| set (_pkg_version "${_pkg_VERSION}") | ||
| endif () | ||
| if (DEFINED _pkg_NOT_FOUND_EXPLANATION) | ||
| set (_pkg_not_found_explanation "${_pkg_NOT_FOUND_EXPLANATION}") | ||
| endif () | ||
| set (${pkgname}_VERSION "${_pkg_version}") | ||
| set (${pkgname}_VERSION "${_pkg_version}" CACHE INTERNAL | ||
| "Recorded dependency version for ${pkgname}" FORCE) | ||
| set (${pkgname}_NOT_FOUND_EXPLANATION "${_pkg_not_found_explanation}") | ||
| set (${pkgname}_NOT_FOUND_EXPLANATION "${_pkg_not_found_explanation}" | ||
| CACHE INTERNAL "Recorded dependency explanation for ${pkgname}" FORCE) | ||
| set (${pkgname}_REQUIRED ${_pkg_REQUIRED}) | ||
| set (${pkgname}_REQUIRED ${_pkg_REQUIRED} CACHE INTERNAL | ||
| "Recorded dependency required-ness for ${pkgname}" FORCE) | ||
| if (_pkg_FOUND) | ||
| set_property (GLOBAL APPEND PROPERTY OIIO_CFP_CUSTOM_BUILD_DEPS_FOUND ${pkgname}) | ||
| else () | ||
| set_property (GLOBAL APPEND PROPERTY OIIO_CFP_CUSTOM_BUILD_DEPS_NOTFOUND ${pkgname}) | ||
| endif () | ||
| endmacro () | ||
|
|
||
|
|
||
| # Utility: if `condition` is true, append `addition` to variable `var` | ||
| macro (string_append_if var condition addition) | ||
| # message (STATUS "string_append_if ${var} ${condition}='${${condition}}' '${addition}'") | ||
|
|
@@ -94,11 +133,26 @@ endmacro() | |
| # Helper: Print a report about missing dependencies and give instructions on | ||
| # how to turn on automatic local dependency building. | ||
| function (print_package_notfound_report) | ||
| get_property(_cfp_custom_build_deps_found | ||
| GLOBAL PROPERTY OIIO_CFP_CUSTOM_BUILD_DEPS_FOUND) | ||
| get_property(_cfp_custom_build_deps_notfound | ||
| GLOBAL PROPERTY OIIO_CFP_CUSTOM_BUILD_DEPS_NOTFOUND) | ||
| set (_cfp_all_build_deps_found ${CFP_ALL_BUILD_DEPS_FOUND}) | ||
| foreach (_pkg IN LISTS _cfp_custom_build_deps_found) | ||
| string (STRIP "${_pkg} ${${_pkg}_VERSION}" _cfp_dep_with_version) | ||
| list (APPEND _cfp_all_build_deps_found "${_cfp_dep_with_version}") | ||
| endforeach () | ||
| foreach (_pkg IN LISTS _cfp_custom_build_deps_notfound) | ||
| list (APPEND _cfp_all_build_deps_found "${_pkg} NONE") | ||
| endforeach () | ||
| list (SORT _cfp_all_build_deps_found CASE INSENSITIVE) | ||
| list (REMOVE_DUPLICATES _cfp_all_build_deps_found) | ||
| message (STATUS) | ||
| message (STATUS "${ColorBoldYellow}=========================================================================${ColorReset}") | ||
| message (STATUS "${ColorBoldYellow}= Dependency report =${ColorReset}") | ||
| message (STATUS "${ColorBoldYellow}=========================================================================${ColorReset}") | ||
| message (STATUS) | ||
| message (STATUS "All build dependencies: ${_cfp_all_build_deps_found}") | ||
| if (CFP_EXTERNAL_BUILD_DEPS_FOUND) | ||
| message (STATUS "${ColorBoldWhite}The following dependencies found externally:${ColorReset}") | ||
| list (SORT CFP_EXTERNAL_BUILD_DEPS_FOUND CASE INSENSITIVE) | ||
|
|
@@ -109,28 +163,46 @@ function (print_package_notfound_report) | |
| message (STATUS " ${_msg}") | ||
| endforeach () | ||
| endif () | ||
| if (_cfp_custom_build_deps_found) | ||
| message (STATUS "${ColorBoldWhite}The following additional dependencies were found:${ColorReset}") | ||
| list (SORT _cfp_custom_build_deps_found CASE INSENSITIVE) | ||
| list (REMOVE_DUPLICATES _cfp_custom_build_deps_found) | ||
| foreach (_pkg IN LISTS _cfp_custom_build_deps_found) | ||
| set (_msg "${_pkg} ${${_pkg}_VERSION} ") | ||
| string_append_if (_msg ${_pkg}_REQUIRED " (REQUIRED)") | ||
| message (STATUS " ${_msg}") | ||
| endforeach () | ||
| endif () | ||
| if (CFP_ALL_BUILD_DEPS_BADVERSION) | ||
| message (STATUS "${ColorBoldWhite}The following dependencies were found but were too old:${ColorReset}") | ||
| list (SORT CFP_ALL_BUILD_DEPS_BADVERSION CASE INSENSITIVE) | ||
| list (REMOVE_DUPLICATES CFP_ALL_BUILD_DEPS_BADVERSION) | ||
| foreach (_pkg IN LISTS CFP_ALL_BUILD_DEPS_BADVERSION) | ||
| set (_msg "${_pkg}") | ||
| string_append_if (_msg ${_pkg}_REQUIRED " (REQUIRED)") | ||
| string_append_if (_msg ${_pkg}_NOT_FOUND_EXPLANATION " ${_pkg}_NOT_FOUND_EXPLANATION") | ||
| if (DEFINED ${_pkg}_NOT_FOUND_EXPLANATION | ||
| AND NOT "${${_pkg}_NOT_FOUND_EXPLANATION}" STREQUAL "") | ||
| string (APPEND _msg " ${${_pkg}_NOT_FOUND_EXPLANATION}") | ||
| endif () | ||
| if (_pkg IN_LIST CFP_LOCALLY_BUILT_DEPS) | ||
| string (APPEND _msg " ${ColorMagenta}(${${_pkg}_VERSION} BUILT LOCALLY)${ColorReset} in ${${_pkg}_build_elapsed_time}s)${ColorReset}") | ||
| endif () | ||
| message (STATUS " ${_msg}") | ||
| endforeach () | ||
| endif () | ||
| if (CFP_ALL_BUILD_DEPS_NOTFOUND) | ||
| set (_cfp_all_build_deps_notfound | ||
| ${CFP_ALL_BUILD_DEPS_NOTFOUND} ${_cfp_custom_build_deps_notfound}) | ||
| if (_cfp_all_build_deps_notfound) | ||
| message (STATUS "${ColorBoldWhite}The following dependencies were not found:${ColorReset}") | ||
| list (SORT CFP_ALL_BUILD_DEPS_NOTFOUND CASE INSENSITIVE) | ||
| list (REMOVE_DUPLICATES CFP_ALL_BUILD_DEPS_NOTFOUND) | ||
| foreach (_pkg IN LISTS CFP_ALL_BUILD_DEPS_NOTFOUND) | ||
| list (SORT _cfp_all_build_deps_notfound CASE INSENSITIVE) | ||
| list (REMOVE_DUPLICATES _cfp_all_build_deps_notfound) | ||
| foreach (_pkg IN LISTS _cfp_all_build_deps_notfound) | ||
| set (_msg "${_pkg} ${_${_pkg}_version_range}") | ||
| string_append_if (_msg ${_pkg}_REQUIRED " (REQUIRED)") | ||
| string_append_if (_msg ${_pkg}_NOT_FOUND_EXPLANATION " ${_pkg}_NOT_FOUND_EXPLANATION") | ||
| if (DEFINED ${_pkg}_NOT_FOUND_EXPLANATION | ||
| AND NOT "${${_pkg}_NOT_FOUND_EXPLANATION}" STREQUAL "") | ||
| string (APPEND _msg " ${${_pkg}_NOT_FOUND_EXPLANATION}") | ||
| endif () | ||
| if (_pkg IN_LIST CFP_LOCALLY_BUILT_DEPS) | ||
| string (APPEND _msg " ${ColorMagenta}(${${_pkg}_VERSION} BUILT LOCALLY in ${${_pkg}_build_elapsed_time}s)${ColorReset}") | ||
| endif () | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -829,7 +829,7 @@ WARN_LOGFILE = | |
| # spaces. See also FILE_PATTERNS and EXTENSION_MAPPING | ||
| # Note: If this tag is empty the current directory is searched. | ||
|
|
||
| INPUT = ../../src | ||
| INPUT = ../../src/include/OpenImageIO | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Where the contents of Doxyfile changed on purpose? |
||
|
|
||
| # This tag can be used to specify the character encoding of the source files | ||
| # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses | ||
|
|
@@ -854,51 +854,11 @@ INPUT_ENCODING = UTF-8 | |
| # *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, | ||
| # *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, *.qsf and *.ice. | ||
|
|
||
| FILE_PATTERNS = *.c \ | ||
| *.cc \ | ||
| *.cxx \ | ||
| *.cpp \ | ||
| *.c++ \ | ||
| *.java \ | ||
| *.ii \ | ||
| *.ixx \ | ||
| *.ipp \ | ||
| *.i++ \ | ||
| *.inl \ | ||
| *.idl \ | ||
| *.ddl \ | ||
| *.odl \ | ||
| *.h \ | ||
| FILE_PATTERNS = *.h \ | ||
| *.hh \ | ||
| *.hxx \ | ||
| *.hpp \ | ||
| *.h++ \ | ||
| *.cs \ | ||
| *.d \ | ||
| *.php \ | ||
| *.php4 \ | ||
| *.php5 \ | ||
| *.phtml \ | ||
| *.inc \ | ||
| *.m \ | ||
| *.markdown \ | ||
| *.md \ | ||
| *.mm \ | ||
| *.dox \ | ||
| *.py \ | ||
| *.pyw \ | ||
| *.f90 \ | ||
| *.f95 \ | ||
| *.f03 \ | ||
| *.f08 \ | ||
| *.f \ | ||
| *.for \ | ||
| *.tcl \ | ||
| *.vhd \ | ||
| *.vhdl \ | ||
| *.ucf \ | ||
| *.qsf \ | ||
| *.ice | ||
| *.h++ | ||
|
|
||
| # The RECURSIVE tag can be used to specify whether or not subdirectories should | ||
| # be searched for input files as well. | ||
|
|
@@ -1158,7 +1118,7 @@ IGNORE_PREFIX = | |
| # If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output | ||
| # The default value is: YES. | ||
|
|
||
| GENERATE_HTML = YES | ||
| GENERATE_HTML = NO | ||
|
|
||
| # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a | ||
| # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of | ||
|
|
@@ -1713,7 +1673,7 @@ EXTRA_SEARCH_MAPPINGS = | |
| # If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. | ||
| # The default value is: YES. | ||
|
|
||
| GENERATE_LATEX = YES | ||
| GENERATE_LATEX = NO | ||
|
|
||
| # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a | ||
| # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of | ||
|
|
@@ -2157,7 +2117,8 @@ SEARCH_INCLUDES = YES | |
| # preprocessor. | ||
| # This tag requires that the tag SEARCH_INCLUDES is set to YES. | ||
|
|
||
| INCLUDE_PATH = ../../src | ||
| INCLUDE_PATH = ../../src/include \ | ||
| ../../build/include | ||
|
|
||
| # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard | ||
| # patterns (like *.h and *.hpp) to filter out the header-files in the | ||
|
|
@@ -2587,4 +2548,4 @@ GENERATE_LEGEND = YES | |
|
|
||
| DOT_CLEANUP = YES | ||
|
|
||
| CLANG_ASSISTED_PARSING = YES | ||
| CLANG_ASSISTED_PARSING = NO | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,60 @@ | ||
| .. | ||
| Copyright Contributors to the OpenImageIO project. | ||
| SPDX-License-Identifier: CC-BY-4.0 | ||
|
|
||
| .. _chap-imiv: | ||
|
|
||
| `imiv`: ImGui Image Viewer | ||
| ################################ | ||
|
|
||
| .. highlight:: bash | ||
|
|
||
|
|
||
| Overview | ||
| ======== | ||
|
|
||
| The :program:`imiv` program is an in-progress Dear ImGui-based replacement | ||
| for the legacy :program:`iv` image viewer. It uses GLFW for windowing and | ||
| currently supports renderer backends built around Vulkan, Metal, or OpenGL. | ||
|
|
||
| ImIv port is still under active development, and several of the most | ||
| valuable workflows are developer-facing: | ||
|
|
||
| * understanding the shared app/viewer/UI architecture; | ||
| * keeping behavior aligned across multiple renderer backends; | ||
| * extending the automated GUI regression suite built on Dear ImGui Test | ||
| Engine. | ||
|
|
||
|
|
||
| Current status | ||
| ============== | ||
|
|
||
| :program:`imiv` already covers the core image-viewing loop, OCIO display | ||
| controls, backend selection, persistent preferences, and a growing automated | ||
| regression suite. But it does **not** yet claim full parity with | ||
| :program:`iv`. | ||
|
|
||
| In particular: | ||
|
|
||
| * Vulkan is currently the reference backend for renderer-side feature work. | ||
| * Current macOS multi-backend verification is green on Vulkan, Metal, and | ||
| OpenGL in the shared backend suite. | ||
| * Multi-backend builds can expose backend selection through both the command | ||
| line and the Preferences window, with restart-on-next-launch semantics. | ||
| * Some legacy :program:`iv` workflows are still intentionally marked as | ||
| incomplete or behaviorally different. | ||
|
|
||
| For that reason, this chapter is organized into a compact user guide and | ||
| deeper developer/testing guides. | ||
|
|
||
|
|
||
| Documentation map | ||
| ================= | ||
|
|
||
| .. toctree:: | ||
| :maxdepth: 1 | ||
|
|
||
| imiv_user | ||
| imiv_dev | ||
| imiv_tests | ||
|
Comment on lines
+58
to
+60
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think only the user documentation should be in src/doc and appear in the ReadTheDocs page that explains how users should use OIIO. I believe the developer documentation (contents of imiv_dev and imiv_tests, I believe) should go in docs/dev with the rest of the developer documentation that explains how we develop the code. |
||
Uh oh!
There was an error while loading. Please reload this page.