Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d1ef24cbf8 | ||
|
|
5185626f9b | ||
|
|
fb9390ece9 |
@@ -104,12 +104,15 @@ jobs:
|
||||
run: |
|
||||
share/ci/scripts/multi/install_pugixml.sh latest
|
||||
- name: Install fixed ext package versions
|
||||
# Minizip-ng depends on ZLIB. ZLIB must be installed first.
|
||||
run: |
|
||||
share/ci/scripts/multi/install_expat.sh 2.4.1 $EXT_PATH
|
||||
share/ci/scripts/multi/install_lcms2.sh 2.2 $EXT_PATH
|
||||
share/ci/scripts/multi/install_yaml-cpp.sh 0.7.0 $EXT_PATH
|
||||
share/ci/scripts/multi/install_pystring.sh 1.1.3 $EXT_PATH
|
||||
share/ci/scripts/multi/install_pybind11.sh 2.9.2 $EXT_PATH
|
||||
share/ci/scripts/multi/install_zlib.sh 1.2.12 $EXT_PATH
|
||||
share/ci/scripts/multi/install_minizip-ng.sh 3.0.6 $EXT_PATH
|
||||
- name: Install latest ext package versions
|
||||
run: |
|
||||
share/ci/scripts/multi/install_imath.sh latest $EXT_PATH
|
||||
@@ -206,12 +209,15 @@ jobs:
|
||||
share/ci/scripts/macos/install_boost.sh latest
|
||||
share/ci/scripts/multi/install_pugixml.sh latest $EXT_PATH
|
||||
- name: Install fixed ext package versions
|
||||
# Minizip-ng depends on ZLIB. ZLIB must be installed first.
|
||||
run: |
|
||||
share/ci/scripts/multi/install_expat.sh 2.4.1 $EXT_PATH
|
||||
share/ci/scripts/multi/install_lcms2.sh 2.2 $EXT_PATH
|
||||
share/ci/scripts/multi/install_yaml-cpp.sh 0.7.0 $EXT_PATH
|
||||
share/ci/scripts/multi/install_pystring.sh 1.1.3 $EXT_PATH
|
||||
share/ci/scripts/multi/install_pybind11.sh 2.9.2 $EXT_PATH
|
||||
share/ci/scripts/multi/install_zlib.sh 1.2.12 $EXT_PATH
|
||||
share/ci/scripts/multi/install_minizip-ng.sh 3.0.6 $EXT_PATH
|
||||
- name: Install latest ext package versions
|
||||
run: |
|
||||
share/ci/scripts/multi/install_imath.sh latest $EXT_PATH
|
||||
@@ -325,12 +331,15 @@ jobs:
|
||||
share/ci/scripts/multi/install_pugixml.sh latest $EXT_PATH
|
||||
shell: bash
|
||||
- name: Install fixed ext package versions
|
||||
# Minizip-ng depends on ZLIB. ZLIB must be installed first.
|
||||
run: |
|
||||
share/ci/scripts/multi/install_lcms2.sh 2.2 $EXT_PATH
|
||||
share/ci/scripts/multi/install_yaml-cpp.sh 0.7.0 $EXT_PATH
|
||||
share/ci/scripts/multi/install_pystring.sh 1.1.3 $EXT_PATH
|
||||
share/ci/scripts/multi/install_pybind11.sh 2.9.2 $EXT_PATH
|
||||
share/ci/scripts/multi/install_expat.sh 2.4.1 $EXT_PATH
|
||||
share/ci/scripts/multi/install_zlib.sh 1.2.12 $EXT_PATH
|
||||
share/ci/scripts/multi/install_minizip-ng.sh 3.0.6 $EXT_PATH
|
||||
shell: bash
|
||||
# OSL not installed due to LLVM compilation time.
|
||||
- name: Install latest ext package versions
|
||||
|
||||
@@ -287,11 +287,12 @@ jobs:
|
||||
--target install \
|
||||
--config ${{ matrix.build-type }} \
|
||||
-- -j$(nproc)
|
||||
echo "ocio_build_path=$(pwd)" >> $GITHUB_ENV
|
||||
working-directory: _build
|
||||
- name: Test
|
||||
run: ctest -V -C ${{ matrix.build-type }}
|
||||
working-directory: _build
|
||||
- name: Test CMake Consumer
|
||||
- name: Test CMake Consumer with shared OCIO
|
||||
if: matrix.build-shared == 'ON'
|
||||
run: |
|
||||
cmake . \
|
||||
@@ -301,6 +302,34 @@ jobs:
|
||||
--config ${{ matrix.build-type }}
|
||||
./consumer
|
||||
working-directory: _build/tests/cmake-consumer-dist
|
||||
- name: Test CMake Consumer with static OCIO
|
||||
if: matrix.build-shared == 'OFF'
|
||||
# The yaml-cpp_VERSION is set below because Findyaml-cpp.cmake needs it but is unable to
|
||||
# extract it from the headers, like the other modules.
|
||||
#
|
||||
# Prefer the static version of each dependencies by using <pkg>_STATIC_LIBRARY.
|
||||
# Alternatively, this can be done by setting <pkg>_LIBRARY and <pkg>_INCLUDE_DIR to
|
||||
# the static version of the package.
|
||||
run: |
|
||||
cmake . \
|
||||
-DCMAKE_PREFIX_PATH=../../../_install \
|
||||
-DCMAKE_BUILD_TYPE=${{ matrix.build-type }} \
|
||||
-Dexpat_ROOT=${{ env.ocio_build_path }}/ext/dist \
|
||||
-Dexpat_STATIC_LIBRARY=ON \
|
||||
-DImath_ROOT=${{ env.ocio_build_path }}/ext/dist \
|
||||
-DImath_STATIC_LIBRARY=ON \
|
||||
-Dpystring_ROOT=${{ env.ocio_build_path }}/ext/dist \
|
||||
-Dyaml-cpp_ROOT=${{ env.ocio_build_path }}/ext/dist \
|
||||
-Dyaml-cpp_STATIC_LIBRARY=ON \
|
||||
-Dyaml-cpp_VERSION=0.7.0 \
|
||||
-DZLIB_ROOT=${{ env.ocio_build_path }}/ext/dist \
|
||||
-DZLIB_STATIC_LIBRARY=ON \
|
||||
-Dminizip-ng_ROOT=${{ env.ocio_build_path }}/ext/dist \
|
||||
-Dminizip-ng_STATIC_LIBRARY=ON
|
||||
cmake --build . \
|
||||
--config ${{ matrix.build-type }}
|
||||
./consumer
|
||||
working-directory: _build/tests/cmake-consumer-dist
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# macOS
|
||||
@@ -424,11 +453,12 @@ jobs:
|
||||
--target install \
|
||||
--config ${{ matrix.build-type }} \
|
||||
-- -j$(sysctl -n hw.ncpu)
|
||||
echo "ocio_build_path=$(pwd)" >> $GITHUB_ENV
|
||||
working-directory: _build
|
||||
- name: Test
|
||||
run: ctest -V -C ${{ matrix.build-type }}
|
||||
working-directory: _build
|
||||
- name: Test CMake Consumer
|
||||
- name: Test CMake Consumer with shared OCIO
|
||||
if: matrix.build-shared == 'ON'
|
||||
run: |
|
||||
cmake . \
|
||||
@@ -438,6 +468,34 @@ jobs:
|
||||
--config ${{ matrix.build-type }}
|
||||
./consumer
|
||||
working-directory: _build/tests/cmake-consumer-dist
|
||||
- name: Test CMake Consumer with static OCIO
|
||||
if: matrix.build-shared == 'OFF'
|
||||
# The yaml-cpp_VERSION is set below because Findyaml-cpp.cmake needs it but is unable to
|
||||
# extract it from the headers, like the other modules.
|
||||
#
|
||||
# Prefer the static version of each dependencies by using <pkg>_STATIC_LIBRARY.
|
||||
# Alternatively, this can be done by setting <pkg>_LIBRARY and <pkg>_INCLUDE_DIR to
|
||||
# the static version of the package.
|
||||
run: |
|
||||
cmake . \
|
||||
-DCMAKE_PREFIX_PATH=../../../_install \
|
||||
-DCMAKE_BUILD_TYPE=${{ matrix.build-type }} \
|
||||
-Dexpat_ROOT=${{ env.ocio_build_path }}/ext/dist \
|
||||
-Dexpat_STATIC_LIBRARY=ON \
|
||||
-DImath_ROOT=${{ env.ocio_build_path }}/ext/dist \
|
||||
-DImath_STATIC_LIBRARY=ON \
|
||||
-Dpystring_ROOT=${{ env.ocio_build_path }}/ext/dist \
|
||||
-Dyaml-cpp_ROOT=${{ env.ocio_build_path }}/ext/dist \
|
||||
-Dyaml-cpp_STATIC_LIBRARY=ON \
|
||||
-Dyaml-cpp_VERSION=0.7.0 \
|
||||
-DZLIB_ROOT=${{ env.ocio_build_path }}/ext/dist \
|
||||
-DZLIB_STATIC_LIBRARY=ON \
|
||||
-Dminizip-ng_ROOT=${{ env.ocio_build_path }}/ext/dist \
|
||||
-Dminizip-ng_STATIC_LIBRARY=ON
|
||||
cmake --build . \
|
||||
--config ${{ matrix.build-type }}
|
||||
./consumer
|
||||
working-directory: _build/tests/cmake-consumer-dist
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Windows
|
||||
@@ -567,13 +625,14 @@ jobs:
|
||||
cmake --build . \
|
||||
--target install \
|
||||
--config ${{ matrix.build-type }}
|
||||
echo "ocio_build_path=$(pwd)" >> $GITHUB_ENV
|
||||
shell: bash
|
||||
working-directory: _build
|
||||
- name: Test
|
||||
run: ctest -V -C ${{ matrix.build-type }}
|
||||
shell: bash
|
||||
working-directory: _build
|
||||
- name: Test CMake Consumer
|
||||
- name: Test CMake Consumer with shared OCIO
|
||||
if: matrix.build-shared == 'ON'
|
||||
run: |
|
||||
cmake . \
|
||||
@@ -585,3 +644,33 @@ jobs:
|
||||
./${{ matrix.build-type }}/consumer
|
||||
shell: bash
|
||||
working-directory: _build/tests/cmake-consumer-dist
|
||||
- name: Test CMake Consumer with static OCIO
|
||||
if: matrix.build-shared == 'OFF'
|
||||
# The yaml-cpp_VERSION is set below because Findyaml-cpp.cmake needs it but is unable to
|
||||
# extract it from the headers, like the other modules.
|
||||
#
|
||||
# Prefer the static version of each dependencies by using <pkg>_STATIC_LIBRARY.
|
||||
# Alternatively, this can be done by setting <pkg>_LIBRARY and <pkg>_INCLUDE_DIR to
|
||||
# the static version of the package.
|
||||
run: |
|
||||
cmake . \
|
||||
-DCMAKE_PREFIX_PATH=../../../_install \
|
||||
-DCMAKE_BUILD_TYPE=${{ matrix.build-type }} \
|
||||
-Dexpat_ROOT=${{ env.ocio_build_path }}/ext/dist \
|
||||
-Dexpat_STATIC_LIBRARY=ON \
|
||||
-DImath_ROOT=${{ env.ocio_build_path }}/ext/dist \
|
||||
-DImath_STATIC_LIBRARY=ON \
|
||||
-Dpystring_ROOT=${{ env.ocio_build_path }}/ext/dist \
|
||||
-Dyaml-cpp_ROOT=${{ env.ocio_build_path }}/ext/dist \
|
||||
-Dyaml-cpp_STATIC_LIBRARY=ON \
|
||||
-Dyaml-cpp_VERSION=0.7.0 \
|
||||
-DZLIB_ROOT=${{ env.ocio_build_path }}/ext/dist \
|
||||
-DZLIB_STATIC_LIBRARY=ON \
|
||||
-Dminizip-ng_ROOT=${{ env.ocio_build_path }}/ext/dist \
|
||||
-Dminizip-ng_STATIC_LIBRARY=ON
|
||||
cmake --build . \
|
||||
--config ${{ matrix.build-type }}
|
||||
export PATH=../../../_install/bin:$PATH
|
||||
./${{ matrix.build-type }}/consumer
|
||||
shell: bash
|
||||
working-directory: _build/tests/cmake-consumer-dist
|
||||
|
||||
+31
-2
@@ -28,13 +28,13 @@ endif()
|
||||
# Project definition.
|
||||
|
||||
project(OpenColorIO
|
||||
VERSION 2.2.0
|
||||
VERSION 2.2.1
|
||||
DESCRIPTION "OpenColorIO (OCIO) is a complete color management solution"
|
||||
HOMEPAGE_URL https://github.com/AcademySoftwareFoundation/OpenColorIO
|
||||
LANGUAGES CXX C)
|
||||
|
||||
# "dev", "beta1", rc1", etc or "" for an official release.
|
||||
set(OpenColorIO_VERSION_RELEASE_TYPE "dev")
|
||||
set(OpenColorIO_VERSION_RELEASE_TYPE "")
|
||||
|
||||
|
||||
###############################################################################
|
||||
@@ -251,6 +251,15 @@ if(OCIO_BUILD_STATIC)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if (NOT BUILD_SHARED_LIBS AND NOT OCIO_INSTALL_EXT_PACKAGES STREQUAL NONE)
|
||||
message(STATUS "Note that building the static version of OpenColorIO does not embed the dependencies\
|
||||
into the library file. The needed dependencies must be linked to the consumer
|
||||
application or shared library that uses static OpenColorIO.
|
||||
|
||||
The following mandatory dependencies MUST be linked to the consumer application or shared library:
|
||||
expat, yaml-cpp, Imath, pystring, minizip-ng and ZLIB")
|
||||
endif()
|
||||
|
||||
|
||||
###############################################################################
|
||||
# Find or install external dependencies
|
||||
@@ -299,6 +308,8 @@ set(OCIO_TARGETS_EXPORT_NAME "${PROJECT_NAME}Targets.cmake")
|
||||
set(OCIO_VERSION_CONFIG "${CMAKE_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake")
|
||||
set(OCIO_PROJECT_CONFIG "${CMAKE_BINARY_DIR}/${PROJECT_NAME}Config.cmake")
|
||||
set(OCIO_CONFIG_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}")
|
||||
set(OCIO_CUSTOM_FIND_MODULE_DIR "${CMAKE_INSTALL_PREFIX}/share/OpenColorIO/cmake/modules")
|
||||
set(OCIO_CUSTOM_MACROS_MODULE_DIR "${CMAKE_INSTALL_PREFIX}/share/OpenColorIO/cmake/macros")
|
||||
|
||||
# Version fetched from the top level project()
|
||||
write_basic_package_version_file(
|
||||
@@ -321,6 +332,24 @@ install(
|
||||
FILE ${OCIO_TARGETS_EXPORT_NAME}
|
||||
)
|
||||
|
||||
if (NOT BUILD_SHARED_LIBS)
|
||||
# Install custom macros used in the find modules.
|
||||
install(FILES
|
||||
${CMAKE_CURRENT_LIST_DIR}/share/cmake/macros/VersionUtils.cmake
|
||||
DESTINATION ${OCIO_CUSTOM_MACROS_MODULE_DIR}
|
||||
)
|
||||
|
||||
# Install custom Find modules.
|
||||
install(FILES
|
||||
${CMAKE_CURRENT_LIST_DIR}/share/cmake/modules/Findexpat.cmake
|
||||
${CMAKE_CURRENT_LIST_DIR}/share/cmake/modules/FindImath.cmake
|
||||
${CMAKE_CURRENT_LIST_DIR}/share/cmake/modules/Findpystring.cmake
|
||||
${CMAKE_CURRENT_LIST_DIR}/share/cmake/modules/Findminizip-ng.cmake
|
||||
${CMAKE_CURRENT_LIST_DIR}/share/cmake/modules/Findyaml-cpp.cmake
|
||||
DESTINATION ${OCIO_CUSTOM_FIND_MODULE_DIR}
|
||||
)
|
||||
endif()
|
||||
|
||||
install(
|
||||
FILES "${OCIO_PROJECT_CONFIG}" "${OCIO_VERSION_CONFIG}"
|
||||
DESTINATION "${OCIO_CONFIG_INSTALL_DIR}"
|
||||
|
||||
@@ -20,3 +20,4 @@ The current OpenColorIO Committers are:
|
||||
| Doug Walker | @doug-walker |
|
||||
| Kevin Wheatley | @KevinJW |
|
||||
| Rémi Achard | @remia |
|
||||
| Cédrik Fuoco | @cedrik-fuoco-adsk |
|
||||
|
||||
+12
-29
@@ -19,7 +19,7 @@ explains our contribution process and procedures, so please review it first:
|
||||
For a description of the roles and responsibilities of the various
|
||||
members of the OpenColorIO community, see [GOVERNANCE](GOVERNANCE.md), and
|
||||
for further details, see the project's
|
||||
[Technical Charter](docs/aswf/Charter.md). Briefly, Contributors are anyone
|
||||
[Technical Charter](ASWF/Charter.md). Briefly, Contributors are anyone
|
||||
who submits content to the project, Committers review and approve such
|
||||
submissions, and the Technical Steering Committee provides general project
|
||||
oversight.
|
||||
@@ -214,18 +214,20 @@ the work.
|
||||
a Committer other than the PR contributor may squash and merge changes into the
|
||||
main branch.
|
||||
|
||||
See also (from the OCIO Developer Guide):
|
||||
* [Getting started](http://opencolorio.org/developers/getting_started.html)
|
||||
* [Submitting Changes](http://opencolorio.org/developers/submitting_changes.html)
|
||||
For a more detailed description of the contribution process, please see the
|
||||
Contributing Guide in the main OCIO documentation:
|
||||
|
||||
* [Getting Started](https://opencolorio.readthedocs.io/en/latest/guides/contributing/contributing.html#getting-started)
|
||||
* [Submitting Changes](https://opencolorio.readthedocs.io/en/latest/guides/contributing/contributing.html#submitting-changes)
|
||||
|
||||
## Coding Standards
|
||||
|
||||
Please see the OpenColorIO
|
||||
[Coding guidelines](http://opencolorio.org/developers/coding_guidelines.html)
|
||||
[Coding guidelines](https://opencolorio.readthedocs.io/en/latest/guides/contributing/contributing.html#coding-style-guide)
|
||||
for a reference on project code style and best practices.
|
||||
|
||||
For standards on contributing to documentation, see the
|
||||
[Documentation guidelines](http://opencolorio.org/developers/documentation_guidelines.html).
|
||||
[Documentation guidelines](https://opencolorio.readthedocs.io/en/latest/guides/contributing/contributing.html#documentation-guidelines).
|
||||
|
||||
## Test Policy
|
||||
|
||||
@@ -245,27 +247,8 @@ The test should should be run, via ``ctest``, before submitting a pull request.
|
||||
|
||||
## Versioning Policy
|
||||
|
||||
OpenColorIO uses [semantic versioning](https://semver.org), which labels each
|
||||
version with three numbers: Major.Minor.Patch, where:
|
||||
OpenColorIO labels each version with three numbers: Major.Minor.Patch, where:
|
||||
|
||||
* **MAJOR** indicates incompatible API changes
|
||||
* **MINOR** indicates functionality added in a backwards-compatible manner
|
||||
* **PATCH** indicates backwards-compatible bug fixes
|
||||
|
||||
## Creating a Release
|
||||
|
||||
To create a new release from the main branch:
|
||||
|
||||
1. Update the release notes in ``CHANGELOG.md`` with a high-level summary of
|
||||
the features and improvements. Also include the summary in the Release
|
||||
comments.
|
||||
|
||||
2. Create a new release on the GitHub Releases page.
|
||||
|
||||
3. Tag the release with name beginning with '``v``', e.g. '``v2.1.0``'.
|
||||
|
||||
4. Download and sign the release tarball, as described
|
||||
[here](https://wiki.debian.org/Creating%20signed%20GitHub%20releases),
|
||||
|
||||
5. Attach the detached ``.asc`` signature file to the GitHub release as a
|
||||
binary file.
|
||||
* **MAJOR** indicates major architectural changes
|
||||
* **MINOR** indicates an introduction of significant new features
|
||||
* **PATCH** indicates ABI-compatible bug fixes and minor enhancements
|
||||
|
||||
@@ -1,106 +0,0 @@
|
||||
# OCIO v2 Documentation Effort
|
||||
|
||||
Since the API autodoc effort is happening simultaneously it will be easier for
|
||||
a lot of contributors to do a light-weight build of the Sphinx docs, which
|
||||
doesn't require building OCIO in its entirety.
|
||||
|
||||
## How to Build HTML Docs
|
||||
|
||||
In addition to the general OCIO v2 dependencies, install Doxygen, Sphinx, and
|
||||
the Python packages listed in the `docs/requirements.txt` file.
|
||||
|
||||
Doxygen can be installed with a package manager, or by downloading a binary
|
||||
distribution from [Doxygen's website](https://www.doxygen.nl/download.html).
|
||||
Use one of the following commands to install Doxygen with a platform-specific
|
||||
package manager:
|
||||
|
||||
Linux (Debian, etc.):
|
||||
|
||||
```
|
||||
apt-get install doxygen
|
||||
```
|
||||
|
||||
Linux (Fedora, etc.):
|
||||
|
||||
```
|
||||
yum install doxygen
|
||||
```
|
||||
|
||||
macOS ([Homebrew](https://brew.sh/)):
|
||||
|
||||
```
|
||||
brew install doxygen
|
||||
```
|
||||
|
||||
Windows ([Chocolatey](https://chocolatey.org/)):
|
||||
|
||||
```
|
||||
choco install doxygen.install
|
||||
```
|
||||
|
||||
Sphinx and the other Python dependencies can be installed with a single `pip`
|
||||
command on all platforms:
|
||||
|
||||
```
|
||||
pip install -r docs/requirements.txt
|
||||
```
|
||||
|
||||
To build only the RST docs (excluding API) locally:
|
||||
|
||||
```
|
||||
cd docs
|
||||
mkdir _build
|
||||
sphinx-build -b html . _build
|
||||
<your web browser name> _build/index.html
|
||||
```
|
||||
|
||||
To build all HTML docs (including API) locally:
|
||||
|
||||
```
|
||||
mkdir _build
|
||||
cd _build
|
||||
cmake ../. -DOCIO_BUILD_DOCS=ON -DCMAKE_INSTALL_PREFIX=../_install
|
||||
make -j<your thread count> docs
|
||||
<your web browser name> docs/build-html/index.html
|
||||
```
|
||||
|
||||
Python 3 is required to build the documentation. If you have multiple Python
|
||||
installs you'll need to make sure pip and CMake find the correct version. You
|
||||
can manually inform cmake of which to use by adding this option to the above
|
||||
`cmake` command, which configures the documentation build:
|
||||
|
||||
```
|
||||
-DPython_ROOT=<Path to Python 3 root directory>
|
||||
```
|
||||
|
||||
To ease the documentation build and test on macOS one could also add these
|
||||
three lines in the ~/.zshrc file:
|
||||
|
||||
```
|
||||
alias python=/usr/local/bin/python3
|
||||
alias pip=/usr/local/bin/pip3
|
||||
alias <your web browser name>=open -a "<your web browser application name>"
|
||||
```
|
||||
|
||||
## Quirks
|
||||
|
||||
The vuepress theme that we've migrated to has some quirks to its design. For
|
||||
example it only allows two nested table of contents (TOC). So things have to be
|
||||
organized in a slightly different way than other sphinx projects.
|
||||
|
||||
The root-level `toc_redirect.rst` points to where to find the different section
|
||||
TOCs. The name and contents of each sections TOC is defined in that
|
||||
sub-directory's `_index.rst` file.
|
||||
|
||||
In this TOC the `:caption:` directive determines what the name of the section
|
||||
will be in the side-bar, and in the header of the website. The *H1* header
|
||||
determines the name of the page in the right/left arrows navigation bar. In a
|
||||
lot of cases this ends up doubling up the name on the page, but this seems
|
||||
unavoidable at the present time. If additional explanatory text is put in the
|
||||
`_index.rst` files then it shouldn't be as problematic.
|
||||
|
||||
The site will show all *H1* headers in the side panel by default, these then
|
||||
expand when selected to show all *H2* headers.
|
||||
|
||||
Due to the limited TOC and side-bar depth, we shouldn't be afraid of looong
|
||||
pages with many *H2* headings to break down the page into logical quadrants.
|
||||
@@ -4,11 +4,28 @@
|
||||
|
||||
.. _publications:
|
||||
|
||||
Publications
|
||||
============
|
||||
Presentations & Publications
|
||||
============================
|
||||
|
||||
DigiPro 2020 **paper** `"The ASWF takes OpenColorIO to the Next Level" <https://drive.google.com/file/d/1y_0ZEftivHH0zoKwvKZx3gH_u_cDm1bD/view?usp=sharing>`_
|
||||
* OCIO wins the Pipeline Tool award at DigiPro 2022! `video <https://vimeo.com/742052701>`_
|
||||
|
||||
DigiPro 2020 **video** `"The ASWF takes OpenColorIO to the Next Level" <https://vimeo.com/458011669>`_
|
||||
* ASWF Open Source Days 2022 `video <https://www.youtube.com/watch?v=WzFlz1HeNdI>`_
|
||||
|
||||
`Cinematic Color <http://cinematiccolor.org/>`_
|
||||
* HPA Tech Retreat 2022 "Color Processing with OCIO v2 and the Academy/ASC Common LUT Format"
|
||||
`Slides & Tutorial <https://drive.google.com/drive/folders/1ZRTIYE6kFb-7sTUtYIYFNJndhY6tmJee?usp=share_link>`_
|
||||
|
||||
* OCIO v2 wins an Engineering Excellence award from the Hollywood Post Alliance!
|
||||
`article <https://www.hollywoodreporter.com/movies/movie-news/hpa-engineering-excellence-award-recipients-announced-1234995410/>`_
|
||||
|
||||
* SIGGRAPH 2021 course "Color management with OpenColorIO V2"
|
||||
`video <https://vimeo.com/689093714>`__ `PDF <https://drive.google.com/file/d/1v37Bz7s1wbJNg-ULsBqnGPA9h7pWNfhU/view?usp=share_link>`__ `ACM <https://dl.acm.org/doi/10.1145/3450508.3464600>`_
|
||||
|
||||
* ASWF Open Source Days 2021 `video <https://youtu.be/FSzLwSTJjWo>`_
|
||||
|
||||
* DigiPro 2020 "The ASWF takes OpenColorIO to the Next Level" `video <https://vimeo.com/458011669>`__ `PDF <https://drive.google.com/file/d/1y_0ZEftivHH0zoKwvKZx3gH_u_cDm1bD/view?usp=sharing>`__ `ACM <https://dl.acm.org/doi/abs/10.1145/3403736.3403942>`_
|
||||
|
||||
* ASWF Open Source Days 2020 `video <https://www.youtube.com/watch?v=7e0SSka8Ar8>`_
|
||||
|
||||
* ASWF Open Source Days 2019 `video <https://youtu.be/L5dpFtgZuhQ>`_
|
||||
|
||||
* `Cinematic Color <http://cinematiccolor.org/>`_
|
||||
|
||||
@@ -10,8 +10,10 @@ Configurations
|
||||
.. toctree::
|
||||
:caption: Configurations
|
||||
|
||||
aces_studio
|
||||
aces_cg
|
||||
ocio_v2_demo
|
||||
aces_1.0.3
|
||||
nuke_default
|
||||
spi_anim
|
||||
spi_vfx
|
||||
ocio_v2_demo
|
||||
nuke_default
|
||||
|
||||
@@ -2,17 +2,21 @@
|
||||
SPDX-License-Identifier: CC-BY-4.0
|
||||
Copyright Contributors to the OpenColorIO Project.
|
||||
|
||||
.. _aces_1.0.3:
|
||||
|
||||
aces_1.0.3
|
||||
==========
|
||||
|
||||
This section describes the ACES 1.0.3 OpenColorIO configuration.
|
||||
|
||||
.. note::
|
||||
There is a more recent version of the ACES config for ACES 1.2 available here:
|
||||
There is a more recent version of the ACES 1.0.3 config for ACES 1.2 available here:
|
||||
|
||||
- https://github.com/colour-science/OpenColorIO-Configs/tree/feature/aces-1.2-config
|
||||
|
||||
An ACES config that takes advantage of the new OCIO v2 features is under development.
|
||||
.. note::
|
||||
Please note that both of these configurations have been supplanted by the new
|
||||
:ref:`aces_studio` for OCIO v2.
|
||||
|
||||
|
||||
Information about ACES
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
..
|
||||
SPDX-License-Identifier: CC-BY-4.0
|
||||
Copyright Contributors to the OpenColorIO Project.
|
||||
|
||||
.. _aces_cg:
|
||||
|
||||
ACES CG Config
|
||||
==============
|
||||
|
||||
The ACES Computer Graphics (CG) config is a simple, lightweight config intended for use
|
||||
in typical digital content creation (DCC) apps that need robust choices for texture and
|
||||
rendering spaces and a basic selection of display and view transforms.
|
||||
|
||||
Users who need a more extensive set of color spaces, including digital cinema camera
|
||||
color spaces and a wider set of displays and view should look at the :ref:`aces_studio`.
|
||||
|
||||
The latest version of this config may be downloaded from the Releases page of its GitHub
|
||||
`repo. <https://github.com/AcademySoftwareFoundation/OpenColorIO-Config-ACES/releases>`_
|
||||
|
||||
The ACES CG Config leverages the high quality ACES implementation built into OCIO itself
|
||||
and so requires no external LUT files. In fact, even the config file is built into OCIO
|
||||
and users may access it from any application that uses OCIO 2.2 or higher by using the
|
||||
following string in place of the config path::
|
||||
ocio://cg-config-v1.0.0_aces-v1.3_ocio-v2.1
|
||||
|
||||
The default built-in config is currently the ACES CG Config, so the even simpler:
|
||||
``ocio://default`` may be used instead. Note however, that the value of the default
|
||||
config may evolve over time.
|
||||
|
||||
The OCIO Configs Working Group collected input from the community and simplified the
|
||||
naming scheme relative to the earlier OCIO v1 ACES configs. However, aliases have been
|
||||
added so that the original color space names continue to work (if there is an equivalent
|
||||
space in the new config).
|
||||
|
||||
Please note that with OCIO v2 we are trying to be more rigorous about what constitutes a
|
||||
"color space". For this reason, the new configs do not bake view transforms or looks into
|
||||
the display color spaces. Therefore, it is necessary to use a DisplayViewTransform rather
|
||||
than a ColorSpaceTransform if you want to bake in an ACES Output Transform. This is not
|
||||
only more rigorous from a color management point of view, it also helps clarify to end-users
|
||||
the important role of a view transform in the process. Baking in a view transform is a
|
||||
fundamentally different process than just converting between color space encodings, and it
|
||||
should be perceived as such by users.
|
||||
@@ -0,0 +1,41 @@
|
||||
..
|
||||
SPDX-License-Identifier: CC-BY-4.0
|
||||
Copyright Contributors to the OpenColorIO Project.
|
||||
|
||||
.. _aces_studio:
|
||||
|
||||
ACES Studio Config
|
||||
==================
|
||||
|
||||
The ACES Studio Config is the successor to the widely used :ref:`ACES config <aces_1.0.3>`
|
||||
for OCIO v1.
|
||||
|
||||
It contains the complete set of ACES color spaces, displays, and views. In addition, it
|
||||
contains some extra color spaces that are widely used in the VFX and post-production
|
||||
industries.
|
||||
|
||||
Users who need a simpler config that contains just the basics needed to use ACES color
|
||||
management in common DCC tools are encouraged to check out the :ref:`aces_cg`.
|
||||
|
||||
The latest version of this config may be downloaded from the Releases page of its GitHub
|
||||
`repo. <https://github.com/AcademySoftwareFoundation/OpenColorIO-Config-ACES/releases>`_
|
||||
|
||||
The ACES Studio Config leverages the high quality ACES implementation built into OCIO itself
|
||||
and so requires no external LUT files. In fact, even the config file is built into OCIO
|
||||
and users may access it from any application that uses OCIO 2.2 or higher by using the
|
||||
following string in place of the config path::
|
||||
ocio://studio-config-v1.0.0_aces-v1.3_ocio-v2.1
|
||||
|
||||
The OCIO Configs Working Group collected input from the community and simplified the
|
||||
naming scheme relative to the earlier OCIO v1 ACES configs. However, aliases have been
|
||||
added so that the original color space names continue to work (if there is an equivalent
|
||||
space in the new config).
|
||||
|
||||
Please note that with OCIO v2 we are trying to be more rigorous about what constitutes a
|
||||
"color space". For this reason, the new configs do not bake view transforms or looks into
|
||||
the display color spaces. Therefore, it is necessary to use a DisplayViewTransform rather
|
||||
than a ColorSpaceTransform if you want to bake in an ACES Output Transform. This is not
|
||||
only more rigorous from a color management point of view, it also helps clarify to end-users
|
||||
the important role of a view transform in the process. Baking in a view transform is a
|
||||
fundamentally different process than just converting between color space encodings, and it
|
||||
should be perceived as such by users.
|
||||
@@ -10,6 +10,10 @@ ocio-v2_demo
|
||||
Note: this is not intended to be a complete production-ready config, its purpose
|
||||
is to introduce many of the new features in OCIO v2.
|
||||
|
||||
Due to the limitations of the web template, it may be easier for you to read this
|
||||
config in a text editor. The config file is located
|
||||
`here. <https://github.com/AcademySoftwareFoundation/OpenColorIO/tree/main/docs/configurations/ocio-v2_demo.ocio>`_
|
||||
|
||||
|
||||
.. literalinclude:: ocio-v2_demo.ocio
|
||||
:language: yaml
|
||||
|
||||
@@ -15,19 +15,19 @@ Colorspaces
|
||||
|
||||
Required.
|
||||
|
||||
This section is a list of all the colorspaces known to OCIO. A
|
||||
colorspace can be referred to elsewhere within the config (including
|
||||
This section is a list of the scene-referred colorspaces in the config.
|
||||
A colorspace may be referred to elsewhere within the config (including
|
||||
other colorspace definitions), and are used within OCIO-supporting
|
||||
applications.
|
||||
|
||||
A color space may use the following keys:
|
||||
A colorspace may use the following keys:
|
||||
|
||||
|
||||
``to_scene_reference`` and ``from_scene_reference``
|
||||
---------------------------------------------------
|
||||
|
||||
These keys specify the transforms that define the relationship between
|
||||
the color space and the scene-referred reference space.
|
||||
the colorspace and the scene-referred reference space.
|
||||
|
||||
Note: In OCIO v1, the keys ``to_reference`` and ``from_reference`` were
|
||||
used (since there was only one reference space). These are still supported
|
||||
@@ -404,10 +404,10 @@ compatibility.
|
||||
|
||||
Optional.
|
||||
|
||||
These two options are used when OCIO transforms are applied on the
|
||||
GPU.
|
||||
These two options were used in OCIO v1 when transforms were applied on the
|
||||
GPU. However, the new GPU renderer in OCIO v2 does not need these.
|
||||
|
||||
It is also used to automatically generate a "shaper LUT" when
|
||||
However, they may still be used to automatically generate a "shaper LUT" when
|
||||
:ref:`baking LUT's <userguide-bakelut>` unless one is explicitly
|
||||
specified (not all output formats utilise this)
|
||||
|
||||
@@ -469,6 +469,8 @@ It's common to use literal ``|`` block syntax to preserve all newlines:
|
||||
This is the second.
|
||||
|
||||
|
||||
.. _config-display-colorspaces:
|
||||
|
||||
Display Colorspaces
|
||||
*******************
|
||||
|
||||
@@ -477,7 +479,7 @@ Display Colorspaces
|
||||
|
||||
Optional.
|
||||
|
||||
This section is a list of all the display colorspaces known to OCIO.
|
||||
This section is a list of all the display-referred colorspaces in the config.
|
||||
A display colorspace is very similar to a colorspace except its transforms
|
||||
go from or to the display-referred reference space rather than the
|
||||
scene-referred reference space.
|
||||
|
||||
@@ -18,6 +18,12 @@ This page alone will not help you to write a useful config file! See
|
||||
the :ref:`configurations` section for examples of complete, practical
|
||||
configs, and discussion of how they fit within a facilities workflow.
|
||||
|
||||
Please note that you should use the OCIO Python or C++ API to generate
|
||||
the config.ocio file rather than writing the YAML by hand in a text editor.
|
||||
However, if you do ever modify YAML by hand rather than via the API, you
|
||||
should run :ref:`overview-ociocheck` on it to ensure that the syntax is
|
||||
correct.
|
||||
|
||||
YAML basics
|
||||
***********
|
||||
|
||||
@@ -29,7 +35,7 @@ has a good overview.
|
||||
|
||||
OCIO configs typically use a small subset of YAML, so looking at
|
||||
existing configs is probably the quickest way to familiarise yourself
|
||||
(just remember the indentation is important!)
|
||||
(just remember the indentation is important!).
|
||||
|
||||
Checking for errors
|
||||
*******************
|
||||
@@ -59,8 +65,12 @@ An OCIO config has the following sections:
|
||||
* :ref:`config-displays-views` -- This section defines how color spaces should be viewed.
|
||||
* :ref:`config-looks` -- Looks are transforms used to adjust colors, such as to apply a
|
||||
creative effect.
|
||||
* :ref:`config-colorspaces` -- This section defines the universe of color space encodings
|
||||
* :ref:`config-colorspaces` -- This section defines the scene-referred color space encodings
|
||||
available within the config.
|
||||
* :ref:`config-display-colorspaces` -- This section defines the display-referred color space
|
||||
encodings available within the config.
|
||||
* :ref:`config-named-transforms` -- Named Transforms are a way to provide transforms that
|
||||
do not have a fixed relationship to a specific reference space, such as a utility curve.
|
||||
|
||||
A collection of :ref:`config-transforms` is provided for use in the various sections
|
||||
of the config file.
|
||||
@@ -99,11 +109,12 @@ Optional. A brief description of the configuration.
|
||||
``name``
|
||||
^^^^^^^^
|
||||
|
||||
Optional. A unique name for the config.
|
||||
Optional. A unique name for the config. Future versions of OCIO might use this as a
|
||||
sort of "namespace" for the color spaces defined in the rest of the config.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
name: foo_2021-02-01
|
||||
name: studio-config-v1.0.0_aces-v1.3_ocio-v2.1
|
||||
|
||||
|
||||
``search_path``
|
||||
|
||||
@@ -16,7 +16,9 @@ File & Viewing rules
|
||||
``file_rules``
|
||||
^^^^^^^^^^^^^^
|
||||
|
||||
Either file_rules or the default role are Required.
|
||||
.. warning::
|
||||
Either the file_rules section or the default role are Required for configs of
|
||||
version 2 or higher.
|
||||
|
||||
Use the File Rules to assign a default color space to files based on their path.
|
||||
|
||||
@@ -24,10 +26,10 @@ Here is example showing the various types of rules that may be defined:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
files_rules:
|
||||
file_rules:
|
||||
- !<Rule> {name: LogC, extension: "*", pattern: "*LogC*", colorspace: ARRI LogC}
|
||||
- !<Rule> {name: OpenEXR, extension: "exr", pattern: "*", colorspace: ACEScg}
|
||||
- !<Rule> {name: TIFF, regex: ".*\.TIF?F$", colorspace: sRGB}
|
||||
- !<Rule> {name: TIFF, regex: ".*\\.TIF?F", colorspace: sRGB}
|
||||
- !<Rule> {name: ColorSpaceNamePathSearch}
|
||||
- !<Rule> {name: Default, colorspace: default}
|
||||
|
||||
@@ -42,36 +44,41 @@ other keys depend on the rule type.
|
||||
This is the basic rule type that uses Unix glob style pattern matching and is
|
||||
thus very easy to use. It contains the keys:
|
||||
|
||||
* ``name``: Name of the rule
|
||||
* ``name``: Name of the rule.
|
||||
* ``pattern``: Glob pattern to be used for the main part of the name/path.
|
||||
This is case-sensitive.
|
||||
This is case-sensitive. It must be in double-quotes. Set it to "*" if you only
|
||||
want the rule to consider the extension.
|
||||
* ``extension``: Glob pattern or string to be used for the file extension. Note that
|
||||
if glob tokens are not used, the extension will be used in a non-case-sensitive
|
||||
way by default. For example the simple string "exr" would match "exr" and "EXR".
|
||||
If you only want to match "exr", use the glob pattern "[e][x][r]".
|
||||
If you only want to match "exr", use the glob pattern "[e][x][r]". It must be
|
||||
in double-quotes. Set it to "*" if you only want the rule to consider the pattern.
|
||||
* ``colorspace``: ColorSpace name to be returned.
|
||||
|
||||
2. Regex Rules --
|
||||
2. RegEx Rules --
|
||||
This is similar to the basic rule but allows additional capabilities for
|
||||
power-users. It contains the keys:
|
||||
|
||||
* ``name``: Name of the rule
|
||||
* ``regex``: Regular expression to be evaluated.
|
||||
* ``name``: Name of the rule.
|
||||
* ``regex``: Regular expression to be evaluated. It must be in double-quotes.
|
||||
* ``colorspace``: ColorSpace name to be returned.
|
||||
|
||||
Note that a backslash character in a RegEx expression needs to be doubled up as ``\\``
|
||||
(as shown in the example above for the TIFF rule) to make it through the Yaml parsing.
|
||||
|
||||
3. OCIO v1 style Rule --
|
||||
This rule allows the use of the OCIO v1 style, where the string is searched for
|
||||
ColorSpace names from the config. This rule may occur 0 or 1 times in the list.
|
||||
The position in the list prioritizes it with respect to the other rules. It has
|
||||
the key:
|
||||
|
||||
* ``name``: Must be "ColorSpaceNamePathSearch".
|
||||
* ``name``: Must be ``ColorSpaceNamePathSearch``.
|
||||
|
||||
4. Default Rule --
|
||||
The file_rules must always end with this rule. If no prior rules match, this
|
||||
The file_rules section must always end with this rule. If no prior rules match, this
|
||||
rule specifies the ColorSpace applications will use. It has the keys:
|
||||
|
||||
* ``name``: must be "Default".
|
||||
* ``name``: must be ``Default``.
|
||||
* ``colorspace``: ColorSpace name to be returned.
|
||||
|
||||
Note: OCIO v1 defined a ``default`` role intended to specify a default color space
|
||||
@@ -84,19 +91,24 @@ missing, an exception will be thrown when loading the config.
|
||||
|
||||
Note that the strictparsing token does not affect the behavior of the File Rules
|
||||
API. In other words, evaluating the rules will always result in a ColorSpace being
|
||||
available to an application. However, the API alsos allow the application to know
|
||||
available to an application. However, the API also allows the application to know
|
||||
which rule was the matching one. So apps that want to work in "strict" mode should
|
||||
first check if strictparsing is true and if so check to see if the matching rule
|
||||
was the Default Rule. If so, it could then notify the user and take whatever action
|
||||
is appropriate.
|
||||
is appropriate. (As an alternative to checking which rule number was matched, the
|
||||
API call ``filepathOnlyMatchesDefaultRule`` may be used instead.)
|
||||
|
||||
Roles may be used rather than ColorSpace names in the rules.
|
||||
|
||||
It is also legal for rules to have additional key:value pairs where the value
|
||||
It is also legal for rules to have additional key:value pairs where the value
|
||||
may be an arbitrary string. The API provides access to getting/setting these
|
||||
additional pairs and will preserve them on a Config read/write. These may be
|
||||
used to define application-specific behavior.
|
||||
|
||||
Note to developers: The older ``parseColorSpaceFromString`` API call is now deprecated
|
||||
and should be replaced with ``getColorSpaceFromFilepath``.
|
||||
|
||||
|
||||
``strictparsing``
|
||||
^^^^^^^^^^^^^^^^^
|
||||
|
||||
@@ -107,12 +119,21 @@ Optional. Valid values are ``true`` and ``false``. Default is ``true``
|
||||
|
||||
strictparsing: true
|
||||
|
||||
OCIO provides a mechanism for applications to extract the colorspace
|
||||
from a filename (the ``parseColorSpaceFromString`` API method)
|
||||
.. warning::
|
||||
This attribute is from OCIO v1. In OCIO v2, the FileRules system was
|
||||
introduced and so the ``strictparsing`` attribute is less relevant now.
|
||||
The ``parseColorSpaceFromString`` API call is now deprecated and the
|
||||
proper way to obtain this information is ``getColorSpaceFromFilepath``.
|
||||
The FileRules always return a default color space but the API
|
||||
``filepathOnlyMatchesDefaultRule`` may be used by applications that
|
||||
want to take some special action if ``strictparsing`` is true.
|
||||
|
||||
OCIO v1 provided a mechanism for applications to extract the colorspace
|
||||
from a filename (the ``parseColorSpaceFromString`` API method).
|
||||
|
||||
So for a file like ``example_render_v001_lnf.0001.exr`` it will
|
||||
determine the colorspace ``lnf`` (it being the right-most substring
|
||||
containing a colorspace name)
|
||||
containing a colorspace name).
|
||||
|
||||
However, if the colorspace cannot be determined and ``strictparsing:
|
||||
true``, it will return an empty string.
|
||||
|
||||
@@ -344,6 +344,7 @@ Keys:
|
||||
must also be present and the result is clamped at the high end.
|
||||
|
||||
|
||||
.. _config-named-transforms:
|
||||
|
||||
Named Transforms
|
||||
****************
|
||||
|
||||
@@ -14,18 +14,39 @@ The documentation primarily lives in the ``docs/`` folder, within the
|
||||
main OpenColorIO repository.
|
||||
|
||||
The rST source for the C++ API documentation is extracted from
|
||||
comments in the public header files in ``export/``
|
||||
comments in the public header files in ``include/``
|
||||
|
||||
The Python API documentation is extracted from dummy .py files within
|
||||
the ``src/pyglue/DocStrings/`` folder
|
||||
Installation of requirements
|
||||
****************************
|
||||
|
||||
Scripts are available, for each platform, to install the documentation
|
||||
requirements.
|
||||
|
||||
The ``install_docs_env.sh`` script in the share/ci/scripts/<Platform> directory
|
||||
will install the Python-related requirements for building the documentation
|
||||
(Sphinx, six, testresources, recommonmark, sphinx-press-theme, sphinx-tabs,
|
||||
and breathe) and Doxygen.
|
||||
|
||||
Use GitBash (`provided with Git for Windows <https://gitforwindows.org/>`_) to
|
||||
execute the script on Windows.
|
||||
|
||||
Python 3 is required to build the documentation. If you have multiple Python
|
||||
installs you'll need to make sure pip and CMake find the correct version. You
|
||||
can manually inform CMake of which to use by adding this option to the below
|
||||
`cmake` command, which configures the documentation build:
|
||||
|
||||
-DPython_ROOT=<Path to Python 3 root directory>
|
||||
|
||||
For the Python packages, ensure their locations are in your ``PYTHONPATH``
|
||||
environment variable prior to configuring the build.
|
||||
|
||||
Building the docs
|
||||
*****************
|
||||
|
||||
Just like a :ref:`regular build from source <building-from-source>`,
|
||||
but specify the ``-D OCIO_BUILD_DOCS=yes`` argument to CMake.
|
||||
The build is just like a :ref:`regular build from source <building-from-source>`,
|
||||
but specify the ``-D OCIO_BUILD_DOCS=ON`` argument to CMake.
|
||||
|
||||
Then run the ``make doc`` target. The default HTML output will be
|
||||
Then run the ``make docs`` target. The default HTML output will be
|
||||
created in ``build_dir/docs/build-html/``
|
||||
|
||||
Note that CMake must be run before each invocation of ``make`` to copy
|
||||
@@ -37,7 +58,50 @@ Initial run::
|
||||
|
||||
Then after each change you wish to preview::
|
||||
|
||||
$ cmake -D OCIO_BUILD_DOCS=yes .. && make doc
|
||||
$ cmake -D OCIO_BUILD_DOCS=ON .. && make docs
|
||||
|
||||
Updating the Python docs
|
||||
************************
|
||||
|
||||
If a contributor makes changes to any part of OCIO which affects the Python API docs
|
||||
(so, public headers, Python bindings, any documentation process code, etc.) they should
|
||||
do a local build with the new CMake option -DOCIO_BUILD_FROZEN_DOCS=ON, and add the
|
||||
modified rST files under docs/api/python/frozen to their PR.
|
||||
|
||||
Note: If you run the scripts on Linux, the freezing process should work well. On other
|
||||
platforms, the process may sometimes make spurious deltas to rST files unrelated to your
|
||||
changes. Please don't add these files to your PR.
|
||||
|
||||
The OCIO conf.py module has a switch that detects when docs are being built on GH Actions
|
||||
(CI env var == true) it will backup the frozen folder to a sibling backup folder on Sphinx
|
||||
init, and following Sphinx build completion will do a file-by-file comparison of the new
|
||||
frozen and the backup folders. If there are differences, the CI job may fail with an error
|
||||
explaining where the differences were found and with instructions on how to fix them.
|
||||
|
||||
The conf.py also has a switch that detects when it is being run on RTD, and in that case
|
||||
will itself run Doxygen to generate the XML needed by breathe prior to building the docs,
|
||||
and will also facilitate a CMake configure_file-like process (via Python) to handle
|
||||
substitutions in headers and docs source files that CMake would usually handle, but can't
|
||||
in this case. One potential plus to all of this is that if someone wants to just build
|
||||
OCIO docs, they can technically do so by running sphinx-build in the docs directory, and
|
||||
nothing more. Right now that only works when the READTHEDOCS env var == True, but it could
|
||||
be easily exposed another way if needed.
|
||||
|
||||
These features required several custom Sphinx extensions tuned for our project which are
|
||||
located under share/docs.
|
||||
|
||||
Building the docs -- Excluding the API docs
|
||||
*******************************************
|
||||
|
||||
If you don't need to build the API documentation, there is a quick and dirty way to
|
||||
do a docs build. This approach does not need to compile the C++ code but is not ideal
|
||||
since it modifies files in the source directory rather than the build directory:
|
||||
|
||||
export READTHEDOCS=True
|
||||
cd docs (in the source directory)
|
||||
mkdir _build
|
||||
sphinx-build -b html . _build
|
||||
<your web browser name> _build/index.html
|
||||
|
||||
Basics
|
||||
******
|
||||
@@ -79,6 +143,30 @@ Basics
|
||||
|
||||
In order to bake a LUT, ...
|
||||
|
||||
Quirks
|
||||
******
|
||||
|
||||
The vuepress theme that we've migrated to has some quirks to its design. For
|
||||
example, it only allows two nested table of contents (TOC). So things have to be
|
||||
organized in a slightly different way than other sphinx projects.
|
||||
|
||||
The root-level `toc_redirect.rst` points to where to find the different section
|
||||
TOCs. The name and contents of each sections TOC is defined in that
|
||||
sub-directory's `_index.rst` file.
|
||||
|
||||
In this TOC the `:caption:` directive determines what the name of the section
|
||||
will be in the sidebar, and in the header of the website. The *H1* header
|
||||
determines the name of the page in the right/left arrows navigation bar. In a
|
||||
lot of cases this ends up doubling up the name on the page, but this seems
|
||||
unavoidable at the present time. If additional explanatory text is put in the
|
||||
`_index.rst` files then it shouldn't be as problematic.
|
||||
|
||||
The site will show all *H1* headers in the side panel by default, these then
|
||||
expand when selected to show all *H2* headers.
|
||||
|
||||
Due to the limited TOC and sidebar depth, we shouldn't be afraid of looong
|
||||
pages with many *H2* headings to break down the page into logical quadrants.
|
||||
|
||||
Emacs rST mode
|
||||
**************
|
||||
|
||||
|
||||
@@ -45,32 +45,32 @@ continuous integration (CI) workflows for all supported platforms. Each .yml
|
||||
file defines one GHA workflow, which can contain one or more jobs and the
|
||||
repository events that trigger the workflow.
|
||||
|
||||
ASWF
|
||||
****
|
||||
|
||||
This subdirectory contains important ASWF governance documents like the
|
||||
OpenColorIO charter, CLAs and DCO reference.
|
||||
|
||||
The ``meetings`` subdirectory contains historical meeting minutes for
|
||||
TSC (Technical Steering Committee) and working group meetings. More
|
||||
recent TSC and working group meeting notes are stored on the
|
||||
`ASWF Wiki. <https://wiki.aswf.io/display/OCIO/Meetings>`_
|
||||
|
||||
docs
|
||||
****
|
||||
|
||||
This directory contains the OpenColorIO documentation source and build
|
||||
configuration.
|
||||
|
||||
The ``guides/contributing/tsc`` subdirectory contains meeting minutes for all
|
||||
recorded TSC (Technical Steering Committee) and working group meetings. The
|
||||
``guides/contributing/aswf`` subdirectory contains important ASWF governance
|
||||
documents like the OpenColorIO charter, CLAs and DCO reference.
|
||||
|
||||
See :ref:`documentation-guidelines` for information on contributing to OCIO
|
||||
documentation.
|
||||
|
||||
ext
|
||||
***
|
||||
|
||||
This directory serves two purposes:
|
||||
|
||||
1. House modified external dependencies which are permissible to store within
|
||||
the OpenColorIO repository. Permissible dependencies have compatible FOSS
|
||||
licenses which have documented approval by the ASWF governing board.
|
||||
|
||||
2. Location for external dependencies temporarily installed and statically
|
||||
linked by OpenColorIO when using the CMake ``OCIO_INSTALL_EXT_PACKAGES``
|
||||
option with the value ``MISSING`` or ``ALL``.
|
||||
Houses modified external dependencies which are permissible to store within
|
||||
the OpenColorIO repository. Permissible dependencies have compatible FOSS
|
||||
licenses which have documented approval by the ASWF governing board.
|
||||
|
||||
include
|
||||
*******
|
||||
|
||||
@@ -13,8 +13,8 @@ Code Review
|
||||
Ask early, and ask often!
|
||||
|
||||
All new contributors are highly encouraged to post development ideas, questions,
|
||||
or any other thoughts to the :ref:`mailing_lists` before starting to code. This
|
||||
greatly improves the process and quality of the resulting library. Code
|
||||
or any other thoughts to :ref:`slack` or the :ref:`mailing_lists` before starting to
|
||||
code. This greatly improves the process and quality of the resulting library. Code
|
||||
reviews (particularly for non-trivial changes) are typically far simpler if the
|
||||
reviewers are aware of a development task beforehand. (And, who knows? Maybe they
|
||||
will have implementation suggestions as well!)
|
||||
@@ -73,6 +73,12 @@ assistance.
|
||||
git add .
|
||||
git commit -s -m 'Implement my feature'
|
||||
|
||||
* If your PR changes anything that appears in the public API documentation,
|
||||
you should follow the directions below in "Updating the Python docs".
|
||||
If this proves problematic for you, please reach out for help on Slack.
|
||||
One of the other developers will probably be able to make the updates
|
||||
for you in another PR.
|
||||
|
||||
* Push your changes back to origin (your fork)::
|
||||
|
||||
git push -u origin myFeature
|
||||
|
||||
@@ -24,6 +24,26 @@ Note that some tools depend on OpenEXR or OpenImageIO and other libraries:
|
||||
.. TODO: check app lib dependencies
|
||||
.. TODO: make a pretty table in RST.
|
||||
|
||||
.. _overview-ocioarchive:
|
||||
|
||||
ocioarchive
|
||||
***********
|
||||
|
||||
This command-line tool allows you to convert a config and its external LUT files
|
||||
into an OCIOZ archive file. A .ocioz file may be supplied to any command that
|
||||
takes the path to a config or set as the OCIO environment variable.
|
||||
|
||||
This example creates a file called myarchive.ocioz::
|
||||
|
||||
$ ocioarchive myarchive --iconfig myconfig/config.ocio
|
||||
|
||||
This command will expand it back out::
|
||||
|
||||
$ ocioarchive --extract myarchive.ocioz
|
||||
|
||||
The --list option may be used to see the contents of a .ocioz file.
|
||||
|
||||
|
||||
.. _overview-ociocheck:
|
||||
|
||||
ociocheck
|
||||
@@ -33,7 +53,7 @@ This is a command-line tool which shows an overview of an OCIO config
|
||||
file, and checks for obvious errors.
|
||||
|
||||
For example, the following shows the output of a config with a typo -
|
||||
the colorspace used for ``compositing_log`` is not incorrect::
|
||||
the colorspace used for ``compositing_log`` is incorrect::
|
||||
|
||||
$ ociocheck --iconfig example.ocio
|
||||
|
||||
@@ -189,6 +209,17 @@ not the case. Also, it does not leverage any of the new OCIO v2 features.
|
||||
.. TODO: Link to discussion of OpenImageIO source?
|
||||
|
||||
|
||||
.. _overview-pyociodisplay:
|
||||
|
||||
pyociodisplay
|
||||
*************
|
||||
|
||||
The pyociodisplay tool is a minimal image viewer implementation demonstrating use of
|
||||
the OCIO GPU renderer in a Python application. It requires downloading a few dependencies
|
||||
before use. For more information, please see the
|
||||
`README. <https://github.com/AcademySoftwareFoundation/OpenColorIO/tree/main/src/apps/pyociodisplay>`_
|
||||
|
||||
|
||||
.. _overview-ociolutimage:
|
||||
|
||||
ociolutimage
|
||||
@@ -240,6 +271,7 @@ ACES2065-1::
|
||||
The --list argument will print out all of the standard ACES color spaces that are
|
||||
supported as --csc arguments.
|
||||
|
||||
|
||||
.. _overview-ocioperf:
|
||||
|
||||
ocioperf
|
||||
@@ -272,6 +304,7 @@ Examples::
|
||||
|
||||
.. TODO: examples formatting
|
||||
|
||||
|
||||
.. _overview-ociowrite:
|
||||
|
||||
ociowrite
|
||||
@@ -298,3 +331,16 @@ Here is an example::
|
||||
|
||||
$ export OCIO=/path/to/the/config.ocio
|
||||
$ ociowrite --colorspaces acescct aces2065-1 --file mytransform.ctf
|
||||
|
||||
|
||||
.. _overview-pyocioamf:
|
||||
|
||||
pyocioamf
|
||||
*********
|
||||
|
||||
The pyocioamf tool is an initial attempt to support the ACES Metadata File (AMF)
|
||||
`format. <https://docs.acescentral.com/guides/amf/>`_
|
||||
This Python script will take an AMF file and produce an OCIO CTF file that implements its color
|
||||
pipeline. The CTF file may be applied to images using tools such as :ref:`overview-ocioconvert`.
|
||||
For more information, please see the
|
||||
`README. <https://github.com/AcademySoftwareFoundation/OpenColorIO/tree/main/src/apps/pyocioamf>`_
|
||||
|
||||
+13
-14
@@ -20,31 +20,30 @@ OCIO v1 represented the culmination of years of production experience earned on
|
||||
films as SpiderMan 2 (2004), Surf's Up (2007), Cloudy with a Chance of Meatballs
|
||||
(2009), Alice in Wonderland (2010), and many more.
|
||||
|
||||
OpenColorIO v2 has been in development since 2017 and was feature complete as of
|
||||
OpenColorIO v2 was in development from 2017 to 2020 and was feature complete as of
|
||||
SIGGRAPH 2020. After a stabilization and bug-fixing period, an official 2.0.0
|
||||
release was made in January 2021. OCIO v2 is in the VFX Reference Platform for
|
||||
calendar year 2021. The OCIO v2 code is in the RB-2.0 branch on
|
||||
`GitHub <https://github.com/AcademySoftwareFoundation/OpenColorIO>`_
|
||||
and we encourage developers to start integrating and providing feedback.
|
||||
See :ref:`upgrading_to_v2` for more.
|
||||
release was made in January 2021. Development has continued to be active since
|
||||
then with the 2.1 release in 2021 and the 2.2 release in 2022 adding even more
|
||||
capabilities. Here is more information about our :ref:`upgrading_to_v2`.
|
||||
|
||||
|
||||
About the Documentation
|
||||
=======================
|
||||
|
||||
The documentation is a work-in-progress and we would love to have your help to
|
||||
improve it! An easy way to get involved is to join the #docs channel on
|
||||
:ref:`slack`.
|
||||
|
||||
The documentation has been updated to include most of the new OCIO v2 features
|
||||
The documentation has been updated to include basic coverage of the new OCIO v2 features
|
||||
but additional work is needed to provide more detail and tutorials about how to
|
||||
best leverage them. We will be working on that over the coming weeks.
|
||||
best leverage them. We have an OCIO User Experience (UX) working group that is
|
||||
gradually working on more coverage.
|
||||
|
||||
The documentation is a work-in-progress and we would love to have your help to
|
||||
improve it! An easy way to get involved is to join the #docs or #ux channel on
|
||||
:ref:`slack`.
|
||||
|
||||
Accessing Other Versions
|
||||
************************
|
||||
|
||||
You are reading the documentation for OCIO v2. The documentation for the the previous
|
||||
stable release (1.1.1) is available `here <https://opencolorio.org/old/index.html>`_.
|
||||
You are reading the documentation for OCIO v2. The documentation for the earlier
|
||||
1.x series of releases is available `here <https://opencolorio.org/old/index.html>`_.
|
||||
|
||||
|
||||
Community
|
||||
|
||||
@@ -7,44 +7,13 @@
|
||||
Downloads
|
||||
=========
|
||||
|
||||
* Sample OCIO Configurations -- `.zip <https://github.com/imageworks/OpenColorIO-Configs/zipball/master>`__ `.tar.gz <https://github.com/imageworks/OpenColorIO-Configs/tarball/master>`__
|
||||
* `OCIO v2 ACES Configurations <https://github.com/AcademySoftwareFoundation/OpenColorIO-Config-ACES/releases>`_
|
||||
* OCIO v1 Legacy Configurations -- `.zip <https://github.com/imageworks/OpenColorIO-Configs/zipball/master>`__ `.tar.gz <https://github.com/imageworks/OpenColorIO-Configs/tarball/master>`__
|
||||
* Reference Images v1.0v4 -- `.tgz <https://code.google.com/p/opencolorio/downloads/detail?name=ocio-images.1.0v4.tgz>`__
|
||||
* Core Library v2.0.0 -- `.zip <https://github.com/AcademySoftwareFoundation/OpenColorIO/archive/v2.0.0.zip>`__ `.tar.gz <https://github.com/AcademySoftwareFoundation/OpenColorIO/archive/v2.0.0.tar.gz>`__
|
||||
* Core Library dev -- `.zip <https://github.com/AcademySoftwareFoundation/OpenColorIO/zipball/main>`__ `.tar.gz <https://github.com/AcademySoftwareFoundation/OpenColorIO/tarball/main>`__
|
||||
|
||||
Per-version updates: :ref:`changelog-main`.
|
||||
|
||||
Build instructions: :ref:`building-from-source`.
|
||||
* `OCIO Library source code <https://github.com/AcademySoftwareFoundation/OpenColorIO/releases>`_
|
||||
|
||||
.. _contributor-license-agreements:
|
||||
|
||||
Contributor License Agreements
|
||||
******************************
|
||||
Please see the `OCIO GitHub repository <https://github.com/AcademySoftwareFoundation/OpenColorIO/tree/main/docs/aswf>`__
|
||||
|
||||
Deprecated Downloads
|
||||
********************
|
||||
* Reference Images v1.0v3 `tgz <https://code.google.com/p/opencolorio/downloads/detail?name=ocio-images.1.0v3.tgz>`__
|
||||
* Reference Images v1.0v2 `tgz <https://code.google.com/p/opencolorio/downloads/detail?name=ocio-images.1.0v2.tgz>`__
|
||||
* Reference Images v1.0v1 `tgz <https://code.google.com/p/opencolorio/downloads/detail?name=ocio-images.1.0v1.tgz>`__
|
||||
|
||||
* Core Library v1.1.1 -- `.zip <https://github.com/AcademySoftwareFoundation/OpenColorIO/archive/v1.1.1.zip>`__ `.tar.gz <https://github.com/AcademySoftwareFoundation/OpenColorIO/archive/v1.1.1.tar.gz>`__
|
||||
* Core Library v1.1.0 -- `.zip <https://github.com/AcademySoftwareFoundation/OpenColorIO/zipball/v1.1.0>`__ `.tar.gz <https://github.com/AcademySoftwareFoundation/OpenColorIO/tarball/v1.1.0>`__
|
||||
* Core Library v1.0.9 -- `.zip <https://github.com/AcademySoftwareFoundation/OpenColorIO/zipball/v1.0.9>`__ `.tar.gz <https://github.com/AcademySoftwareFoundation/OpenColorIO/tarball/v1.0.9>`__
|
||||
* Core Library v1.0.8 -- `.zip <https://github.com/AcademySoftwareFoundation/OpenColorIO/zipball/v1.0.8>`__ `.tar.gz <https://github.com/AcademySoftwareFoundation/OpenColorIO/tarball/v1.0.8>`__
|
||||
* Core Library v1.0.7 -- `.zip <https://github.com/AcademySoftwareFoundation/OpenColorIO/zipball/v1.0.7>`__ `.tar.gz <https://github.com/AcademySoftwareFoundation/OpenColorIO/tarball/v1.0.7>`__
|
||||
* Core Library v1.0.6 -- `.zip <https://github.com/AcademySoftwareFoundation/OpenColorIO/zipball/v1.0.6>`__ `.tar.gz <https://github.com/AcademySoftwareFoundation/OpenColorIO/tarball/v1.0.6>`__
|
||||
* Core Library v1.0.5 -- `.zip <https://github.com/AcademySoftwareFoundation/OpenColorIO/zipball/v1.0.5>`__ `.tar.gz <https://github.com/AcademySoftwareFoundation/OpenColorIO/tarball/v1.0.5>`__
|
||||
* Core Library v1.0.4 -- `.zip <https://github.com/AcademySoftwareFoundation/OpenColorIO/zipball/v1.0.4>`__ `.tar.gz <https://github.com/AcademySoftwareFoundation/OpenColorIO/tarball/v1.0.4>`__
|
||||
* Core Library v1.0.3 -- `.zip <https://github.com/AcademySoftwareFoundation/OpenColorIO/zipball/v1.0.3>`__ `.tar.gz <https://github.com/AcademySoftwareFoundation/OpenColorIO/tarball/v1.0.3>`__
|
||||
* Core Library v1.0.2 -- `.zip <https://github.com/AcademySoftwareFoundation/OpenColorIO/zipball/v1.0.2>`__ `.tar.gz <https://github.com/AcademySoftwareFoundation/OpenColorIO/tarball/v1.0.2>`__
|
||||
* Core Library v1.0.1 -- `.zip <https://github.com/AcademySoftwareFoundation/OpenColorIO/zipball/v1.0.1>`__ `.tar.gz <https://github.com/AcademySoftwareFoundation/OpenColorIO/tarball/v1.0.1>`__
|
||||
* Core Library v1.0.0 -- `.zip <https://github.com/AcademySoftwareFoundation/OpenColorIO/zipball/v1.0.0>`__ `.tar.gz <https://github.com/AcademySoftwareFoundation/OpenColorIO/tarball/v1.0.0>`__
|
||||
|
||||
* Color Config v0.7v4 `tgz <https://code.google.com/p/opencolorio/downloads/detail?name=ocio-configs.0.7v4.tgz>`__ (OCIO v0.7.6+)
|
||||
* Core Library v0.8.7 -- `.zip <https://github.com/AcademySoftwareFoundation/OpenColorIO/zipball/v0.8.7>`__ `.tar.gz <https://github.com/AcademySoftwareFoundation/OpenColorIO/tarball/v0.8.7>`__
|
||||
* Core Library v0.7.9 -- `.zip <https://github.com/AcademySoftwareFoundation/OpenColorIO/zipball/v0.7.9>`__ `.tar.gz <https://github.com/AcademySoftwareFoundation/OpenColorIO/tarball/v0.7.9>`__
|
||||
* Core Library v0.6.1 -- `.zip <https://github.com/AcademySoftwareFoundation/OpenColorIO/zipball/v0.6.1>`__ `.tar.gz <https://github.com/AcademySoftwareFoundation/OpenColorIO/tarball/v0.6.1>`__
|
||||
* Core Library v0.5.16 -- `.zip <https://github.com/AcademySoftwareFoundation/OpenColorIO/zipball/v0.5.16>`__ `.tar.gz <https://github.com/AcademySoftwareFoundation/OpenColorIO/tarball/v0.5.16>`__
|
||||
* Core Library v0.5.8 -- `.zip <https://github.com/AcademySoftwareFoundation/OpenColorIO/zipball/v0.5.8>`__ `.tar.gz <https://github.com/AcademySoftwareFoundation/OpenColorIO/tarball/v0.5.8>`__
|
||||
|
||||
Please see the `OCIO GitHub repository <https://github.com/AcademySoftwareFoundation/OpenColorIO/blob/main/docs/aswf/cla_dco.rst>`__
|
||||
|
||||
@@ -14,7 +14,12 @@ each application.
|
||||
Note that OCIO configurations are required to do any 'real' work, and are
|
||||
available separately on the :ref:`downloads` section of this site. Example
|
||||
images are also available. For assistance customizing .ocio configurations,
|
||||
contact `ocio-user <https://lists.aswf.io/g/ocio-user>`__\.
|
||||
contact `ocio-user <https://lists.aswf.io/g/ocio-user>`_ or the #configs
|
||||
channel on :ref:`slack`
|
||||
|
||||
If your application supports OCIO 2.2 or later, you may take advantage of the
|
||||
configurations built into OCIO itself. For example, by setting the config path to:
|
||||
``ocio://default``.
|
||||
|
||||
- Step 1: set the ``$OCIO`` environment-variable to ``/path/to/your/config.ocio``
|
||||
- Step 2: Launch supported application.
|
||||
@@ -23,6 +28,6 @@ If you are on a platform that is not envvar friendly, most applications also
|
||||
provide a menu option to select a different OCIO configuration after launch.
|
||||
|
||||
Please be sure to select a configuration that matches your color workflow (VFX
|
||||
work typically requires a different profile than animated features). If you need
|
||||
work sometimes requires a different profile than animated features). If you need
|
||||
assistance picking a profile, email
|
||||
`ocio-user <https://lists.aswf.io/g/ocio-user>`__\.
|
||||
|
||||
@@ -7,11 +7,10 @@
|
||||
Quick Start for Config Authors
|
||||
==============================
|
||||
|
||||
Get started by following the :ref:`installation` instructions. Note that if
|
||||
you want to try out the new OpenColorIO v2 features, you'll need to build
|
||||
from source. You will want to make sure to build the command-line tools as
|
||||
well as the library itself, so you should install OpenImageIO or OpenEXR before
|
||||
building (OCIO is now able to build the latter itself).
|
||||
As a config author, you'll want access to the OCIO command-line tools such as
|
||||
``ociocheck``. Please see the :ref:`installation` instructions for the various
|
||||
options, for example Homebrew on macOS and Vcpkg on Windows. On Linux you may
|
||||
need to build from source.
|
||||
|
||||
Grab the available configuration files (and the sample images, if you want) from
|
||||
:ref:`downloads` so you'll have some examples to study.
|
||||
|
||||
@@ -15,9 +15,10 @@ testing, example configs, and documentation as well as actual coding.
|
||||
issues with the ``good first issue`` label.
|
||||
|
||||
* If you want to help develop config files, start by looking at :ref:`quick_start_config_authors`
|
||||
and join the #configs channel on :ref:`slack`.
|
||||
and join the #configs channel on :ref:`slack`. From there, you may want to join the
|
||||
OCIO Configs working group.
|
||||
|
||||
* If you want to help with documentation, join the #docs channel on :ref:`slack`.
|
||||
* If you want to help with documentation, join the #docs and #ux channel on :ref:`slack`.
|
||||
|
||||
* If you want to help test, join the #general channel on :ref:`slack` and
|
||||
let us know you want to help test.
|
||||
|
||||
@@ -8,10 +8,12 @@ Quick Start for Developers
|
||||
==========================
|
||||
|
||||
Get started by following the :ref:`installation` instructions to build OCIO from
|
||||
source. You will want to make sure to build the command-line tools as well as the
|
||||
library itself, so you should install OpenImageIO or OpenEXR before building
|
||||
(OCIO is now able to build the latter itself). Note that active development of
|
||||
OCIO v2 is happening in the main branch.
|
||||
source. In addition to the library itself, you will want to make sure to build the
|
||||
command-line tools, including ``ocioconvert``.
|
||||
|
||||
Note that active development of OCIO v2 is happening in the main branch.
|
||||
|
||||
Watch the OCIO SIGGRAPH course listed in :ref:`publications`.
|
||||
|
||||
Grab the available configuration files (and the sample images, if you want) from
|
||||
:ref:`downloads`.
|
||||
@@ -22,12 +24,16 @@ the :ref:`overview-ocioconvert` tool to process an image from one color space to
|
||||
Try using :ref:`overview-ociodisplay` to view an image through a color space conversion.
|
||||
|
||||
Take a look at the example code in the :ref:`developers-usageexamples` and then study
|
||||
the code for the command-line tools, which is under src/apps.
|
||||
the code for the command-line tools, which is under ``src/apps``.
|
||||
|
||||
There are helper classes under src/libutils/apphelpers for common application tasks
|
||||
There are helper classes under ``src/libutils/apphelpers`` for common application tasks
|
||||
such as generating color space menus, building a viewing pipeline for a viewport,
|
||||
and writing a color picker for scene-linear color spaces.
|
||||
|
||||
Look through the :ref:`concepts_overview` to get a sense of the big picture.
|
||||
|
||||
Check out :ref:`upgrading_to_v2` for an overview of the new features in OCIO v2.
|
||||
|
||||
Join the #dev and #ux channel on :ref:`slack`. From the #ux channel, you may want to
|
||||
get involved with the OCIO User Experience (UX) working group which discusses best
|
||||
practices for implementing OCIO support in applications.
|
||||
|
||||
+239
-131
@@ -5,30 +5,45 @@
|
||||
.. _installation:
|
||||
|
||||
Installation
|
||||
************
|
||||
============
|
||||
|
||||
Although OpenColorIO is available through a variety of package managers, please note that the
|
||||
version available through a given package manager may be significantly outdated when compared to
|
||||
the current official OCIO release. Even two years after the introduction of OpenColorIO v2, several
|
||||
package managers continue to install OCIO 1.1.1.
|
||||
Installation may be done either by installing pre-built binaries from various package
|
||||
managers or by building from source. (The OCIO project currently does not provide
|
||||
pre-built libraries as downloadable artifacts other than through package managers.)
|
||||
|
||||
Please note that the version available through a given package manager may be significantly
|
||||
outdated when compared to the current official OCIO release, so please verify the version
|
||||
you install is current. (Unfortunately, even two years after the introduction of
|
||||
OpenColorIO v2, several package managers continue to install OCIO 1.1.1.)
|
||||
|
||||
Alternatives
|
||||
************
|
||||
|
||||
.. _Python:
|
||||
|
||||
Python
|
||||
^^^^^^
|
||||
++++++
|
||||
|
||||
If you only need the Python bindings, the simplest solution is to take advantage of the pre-built
|
||||
wheels in the Python Package Installer (PyPi) `here <https://pypi.org/project/opencolorio>`__. It
|
||||
can be installed by using this command::
|
||||
If you only need the Python binding, the simplest solution is to take advantage of the pre-built
|
||||
wheels in the Python Package Index (PyPI) `here <https://pypi.org/project/opencolorio>`_. It
|
||||
can be installed as follows, once you have Python installed.
|
||||
|
||||
**PyPI**::
|
||||
|
||||
pip install opencolorio
|
||||
|
||||
OpenImageIO
|
||||
^^^^^^^^^^^
|
||||
The pre-built wheels are listed `here <https://pypi.org/project/opencolorio/#files>`_. Note that
|
||||
source code is provided, so it may be possible for ``pip`` to compile the binding on your machine if
|
||||
the matrix of Python version and platform version does not have the combination you need. More
|
||||
detailed instructions are available for how to use
|
||||
`pip. <https://packaging.python.org/en/latest/tutorials/installing-packages/>`_
|
||||
|
||||
If you only need to apply color conversions to images, please note that OpenImageIO's oiiotool has
|
||||
most of the functionality of the ocioconvert command-line tool (although not everything, such as
|
||||
GPU processing). OpenImageIO is available via several package managers (including brew and vcpkg).
|
||||
OpenImageIO
|
||||
+++++++++++
|
||||
|
||||
If you only need to apply color conversions to images, please note that OpenImageIO's ``oiiotool`` has
|
||||
most of the functionality of the ``ocioconvert`` command-line tool (although not everything, such as
|
||||
GPU processing). OpenImageIO is available via several package managers (including Homebrew and Vcpkg).
|
||||
|
||||
**Homebrew**::
|
||||
|
||||
@@ -38,16 +53,17 @@ GPU processing). OpenImageIO is available via several package managers (includin
|
||||
|
||||
vcpkg install openimageio[opencolorio,tools]:x64-windows --recurse
|
||||
|
||||
Installing OpenColorIO using existing packages
|
||||
**********************************************
|
||||
|
||||
Installing OpenColorIO using Package Managers
|
||||
=============================================
|
||||
|
||||
Linux
|
||||
^^^^^
|
||||
*****
|
||||
|
||||
When it comes to Linux distributions, relatively few of the Linux distribution repositories have been
|
||||
updated to OCIO v2. The **latest Fedora** is one good option as it offers the most
|
||||
recent release of OpenColorIO v2. Information about the package can be found on
|
||||
`fedoraproject website <https://packages.fedoraproject.org/pkgs/OpenColorIO/OpenColorIO/index.html>`__.
|
||||
When it comes to Linux distributions, relatively few of the Linux distribution repositories
|
||||
have been updated to OCIO v2. The **latest Fedora** is one good option as it offers a
|
||||
recent release of OpenColorIO v2. Information about the package can be found on the
|
||||
`Fedora project website <https://packages.fedoraproject.org/pkgs/OpenColorIO/OpenColorIO/index.html>`__.
|
||||
|
||||
For the other distributions, information about which release of OpenColorIO is available can be
|
||||
verified on `pkgs.org <https://pkgs.org/search/?q=OpenColorIO>`__.
|
||||
@@ -55,72 +71,88 @@ verified on `pkgs.org <https://pkgs.org/search/?q=OpenColorIO>`__.
|
||||
**The recommendation is to build OpenColorIO from source**. You may build from source using the
|
||||
instructions below. See :ref:`building-from-source`.
|
||||
|
||||
Windows 7 or newer using vcpkg
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
Windows using Vcpkg
|
||||
*******************
|
||||
|
||||
Vcpkg can be used to install OpenColorIO on Windows. In order to do that, Vcpkg must be installed
|
||||
Vcpkg can be used to install OpenColorIO on Windows 7 or higher. To do that, Vcpkg must be installed
|
||||
by following the `official instructions <https://vcpkg.io/en/getting-started.html>`__. Once Vcpkg
|
||||
is installed, OpenColorIO and some of the tools can be installed with the following command::
|
||||
|
||||
vcpkg install opencolorio[tools]:x64-windows
|
||||
|
||||
Note that this package **does not** install ocioconvert, ociodisplay, ociolutimage and the Python
|
||||
bindings.
|
||||
Note that this package **does not** install ``ocioconvert``, ``ociodisplay``, ``ociolutimage``,
|
||||
and the Python binding.
|
||||
|
||||
The three missing tools can be built from source by following the steps in the :ref:`Windows 7 or newer`
|
||||
section while the Python bindings can be install using the pip command in the :ref:`Python` section.
|
||||
If you need the extra command-line tools, you'll need to install :ref:`from source. <Windows>`
|
||||
However, the Python binding can be installed as described in the :ref:`Python` section.
|
||||
|
||||
OS X using Homebrew
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
MacOS using Homebrew
|
||||
*******************
|
||||
|
||||
You can use the Homebrew package manager to install OpenColorIO on OS X.
|
||||
You can use the Homebrew package manager to install OpenColorIO on macOS.
|
||||
|
||||
First install Homebrew as per the instructions on the `Homebrew
|
||||
homepage <http://mxcl.github.com/homebrew/>`__ (or see the `Homebrew wiki
|
||||
<https://github.com/mxcl/homebrew/wiki/Installation>`__ for more
|
||||
detailed instructions)
|
||||
homepage <https://brew.sh/>`__ (or see the `Homebrew documentation
|
||||
<https://docs.brew.sh/>`__ for more detailed instructions).
|
||||
|
||||
Then simply run the following command to install::
|
||||
|
||||
brew install opencolorio
|
||||
|
||||
Homebrew does not install the Python binding or the command-line tools that depend on OpenImageIO
|
||||
such as ocioconvert, ociodisplay and ociolutimage.
|
||||
Homebrew does not install the Python binding or the command-line tools that depend on either
|
||||
OpenImageIO or OpenEXR such as ``ocioconvert``, ``ociodisplay``, and ``ociolutimage``.
|
||||
|
||||
.. _building-from-source:
|
||||
|
||||
Building from source
|
||||
********************
|
||||
Building from Source
|
||||
====================
|
||||
|
||||
The basic requirements to build OCIO from source on Linux, macOS, and Windows are a
|
||||
supported C++ compiler, CMake, and an internet connection. The OCIO Cmake scripts are
|
||||
able to download, build, and install all other required components. However, more
|
||||
advanced users are also able to have the build use their own version of dependencies.
|
||||
|
||||
Dependencies
|
||||
^^^^^^^^^^^^
|
||||
************
|
||||
|
||||
The basic requirements for building OCIO are the following. Note that, by
|
||||
default, cmake will try to install all of the items labelled with * and so
|
||||
it is not necessary to install those items manually:
|
||||
OCIO depends on the following components. By default, the OCIO CMake scripts will
|
||||
download and build the items labelled with a \*, so it is not necessary to install those
|
||||
items manually:
|
||||
|
||||
- cmake >= 3.12
|
||||
Required components:
|
||||
|
||||
- C++ 11-17 compiler (gcc, clang, msvc)
|
||||
- CMake >= 3.13
|
||||
- \*Expat >= 2.4.1 (XML parser for CDL/CLF/CTF)
|
||||
- \*yaml-cpp >= 0.7.0 (YAML parser for Configs)
|
||||
- \*Imath >= 3.0 (for half domain LUTs)
|
||||
- \*pystring >= 1.1.3
|
||||
- \*minizip-ng >= 3.0.7 (for config archiving)
|
||||
- \*ZLIB >= 1.2.13 (for config archiving)
|
||||
|
||||
Some optional components also depend on:
|
||||
Optional OCIO functionality also depends on:
|
||||
|
||||
- \*Little CMS >= 2.2 (for ociobakelut ICC profile baking)
|
||||
- \*pybind11 >= 2.9.2 (for the Python bindings)
|
||||
- Python >= 2.7 (for the Python bindings)
|
||||
- Python 3.7 or 3.8 (for the docs, with the following PyPi packages)
|
||||
- Sphinx
|
||||
- six
|
||||
- testresources
|
||||
- recommonmark
|
||||
- sphinx-press-theme
|
||||
- sphinx-tabs
|
||||
- breathe
|
||||
- NumPy (for complete Python test suite)
|
||||
- \*OpenGL GLUT & GLEW (for ociodisplay)
|
||||
- \*OpenEXR >= 3.0 (for apps including ocioconvert)
|
||||
- OpenImageIO >= 2.1.9 (for apps including ocioconvert)
|
||||
- \*OpenFX >= 1.4 (for the OpenFX plug-ins)
|
||||
- OpenShadingLanguage >= 1.11 (for the OSL unit tests)
|
||||
- Doxygen (for the docs)
|
||||
- OpenImageIO >= 2.1.9 or OpenEXR >= 3.0 (for apps including ocioconvert)
|
||||
- NumPy (optionally used in the Python test suite)
|
||||
- \*pybind11 >= 2.9.2 (for the Python binding)
|
||||
- Python >= 2.7 (for the Python binding only)
|
||||
- Python 3.7 - 3.9 (for building the documentation)
|
||||
|
||||
Building the documentation requires the following packages, available via PyPI:
|
||||
|
||||
- Sphinx
|
||||
- six
|
||||
- testresources
|
||||
- recommonmark
|
||||
- sphinx-press-theme
|
||||
- sphinx-tabs
|
||||
- breathe
|
||||
|
||||
Example bash scripts are provided in
|
||||
`share/ci/scripts <https://github.com/AcademySoftwareFoundation/OpenColorIO/tree/main/share/ci/scripts>`_
|
||||
@@ -132,14 +164,14 @@ available for all supported platforms. Use GitBash
|
||||
this script on Windows.
|
||||
|
||||
Automated Installation
|
||||
----------------------
|
||||
++++++++++++++++++++++
|
||||
|
||||
Listed dependencies with a preceeding * can be automatically installed at
|
||||
build time using the ``OCIO_INSTALL_EXT_PACKAGES`` option in your cmake
|
||||
command (requires an internet connection). This is the default. C/C++
|
||||
libraries are pulled from external repositories, built, and statically-linked
|
||||
into libOpenColorIO. Python packages are installed with ``pip``. All installs
|
||||
of these components are fully contained within your build directory.
|
||||
Dependencies listed above with a preceeding * can be automatically installed at
|
||||
build time using the ``OCIO_INSTALL_EXT_PACKAGES`` option in your ``cmake``
|
||||
command (requires an internet connection). The C/C++ libraries are pulled from
|
||||
external repositories, built, and are (typically) statically-linked into an OCIO
|
||||
dynamic library. All installs of these components are fully contained within your
|
||||
build directory.
|
||||
|
||||
Three ``OCIO_INSTALL_EXT_PACKAGES`` options are available::
|
||||
|
||||
@@ -153,37 +185,130 @@ Three ``OCIO_INSTALL_EXT_PACKAGES`` options are available::
|
||||
current system.
|
||||
|
||||
Existing Install Hints
|
||||
----------------------
|
||||
++++++++++++++++++++++
|
||||
|
||||
When using existing system libraries, the following CMake variables can be
|
||||
defined to hint at non-standard install locations and preference of shared
|
||||
or static linking:
|
||||
When using libraries already on your system, the CMake variable
|
||||
``-D <Package Name>_ROOT=<Path>`` may be used to specify the path to the include and
|
||||
library root directory rather than have CMake try to find it. The package names used
|
||||
by OCIO are as follows (note that these are case-sensitive):
|
||||
|
||||
- ``-Dexpat_ROOT=<path>`` (include and/or library root dir)
|
||||
- ``-Dexpat_STATIC_LIBRARY=ON`` (prefer static lib)
|
||||
- ``-Dyaml-cpp_ROOT=<path>`` (include and/or library root dir)
|
||||
- ``-Dyaml-cpp_STATIC_LIBRARY=ON`` (prefer static lib)
|
||||
- ``-DImath_ROOT=<path>`` (include and/or library root dir)
|
||||
- ``-DImath_STATIC_LIBRARY=ON`` (prefer static lib)
|
||||
- ``-DHalf_ROOT=<path>`` (include and/or library root dir)
|
||||
- ``-DHalf_STATIC_LIBRARY=ON`` (prefer static lib)
|
||||
- ``-Dpystring_ROOT=<path>`` (include and/or library root dir)
|
||||
- ``-Dpystring_STATIC_LIBRARY=ON`` (prefer static lib)
|
||||
- ``-Dlcms2_ROOT=<path>`` (include and/or library root dir)
|
||||
- ``-Dlcms2_STATIC_LIBRARY=ON`` (prefer static lib)
|
||||
- ``-Dpybind11_ROOT=<path>`` (include and/or library root dir)
|
||||
- ``-DPython_EXECUTABLE=<path>`` (Python executable)
|
||||
Required:
|
||||
|
||||
- ``expat``
|
||||
- ``yaml-cpp``
|
||||
- ``Imath``
|
||||
- ``pystring``
|
||||
- ``ZLIB``
|
||||
- ``minizip-ng``
|
||||
|
||||
Optional:
|
||||
|
||||
- ``OpenEXR``
|
||||
- ``OpenImageIO``
|
||||
- ``lcms2``
|
||||
- ``pybind11``
|
||||
- ``openfx``
|
||||
- ``OSL``
|
||||
- ``Sphinx``
|
||||
- ``GLEW``
|
||||
- ``GLUT``
|
||||
- ``Python``
|
||||
|
||||
There are scenarios in which some of the dependencies may not be compiled into an
|
||||
OCIO dynamic library. This is more likely when OCIO does not download the packages
|
||||
itself. In these cases, it may be helpful to additionally specify the CMake variable
|
||||
``-D <Package Name>_STATIC_LIBRARY=ON``. The following package names support this hint:
|
||||
``expat``, ``yaml-cpp``, ``Imath``, ``lcms2``, ``ZLIB``, and ``minizip-ng``.
|
||||
|
||||
Rather than using ``_ROOT``, and possibly ``_STATIC_LIBRARY``, you may instead use
|
||||
``-D <Package Name>_LIBRARY=<Path>`` and ``-D <Package Name>_INCLUDE_DIR=<Path>``.
|
||||
In this case, the library path will control whether a static or dynamic library is used.
|
||||
It may also be used to handle situations where the library and/or include files are not
|
||||
in the typical location relative to the root directory.
|
||||
|
||||
The OCIO `CMake find modules <https://github.com/AcademySoftwareFoundation/OpenColorIO/tree/main/share/cmake/modules>`_
|
||||
may be consulted for more detail on the handling of a given package and the CMake
|
||||
variables it uses.
|
||||
|
||||
Please note that if you provide your own ``minizip-ng``, rather than having OCIO's CMake
|
||||
download and build it, you will likely need to set its CMake variables the same way
|
||||
that OCIO does (e.g., enable ZLib and turn off most other options). Using a ``minizip-ng``
|
||||
from various package managers (e.g., Homebrew) probably won't work. Please see the
|
||||
settings that begin with ``-DMZ_`` that are used in the OCIO
|
||||
`minizip-ng find module. <https://github.com/AcademySoftwareFoundation/OpenColorIO/tree/main/share/cmake/modules/Findminizip-ng.cmake>`_
|
||||
|
||||
Please note that if you build a static OCIO library, it will not contain the libraries
|
||||
for the external packages and so you will need to list those separately when linking your
|
||||
client application. If you had OCIO download and build these packages, you will
|
||||
find them under your build directory in ``ext/dist/lib``. The libraries that are
|
||||
needed are: ``expat``, ``yaml-cpp``, ``Imath``, ``pystring``, ``ZLIB``, and ``minizip-ng``.
|
||||
|
||||
The OCIO ``make install`` step will install CMake configuration files that may be used
|
||||
by applications that consume OCIO to find and utilize OCIO during their own build process.
|
||||
|
||||
For the Python packages required for the documentation, ensure that their locations
|
||||
are in your ``PYTHONPATH`` environment variable prior to configuring the build.
|
||||
|
||||
This custom variable is also available:
|
||||
|
||||
- ``-DPython_EXECUTABLE=<path>`` (Python executable for pybind11)
|
||||
|
||||
|
||||
.. _enabling-optional-components:
|
||||
|
||||
Enabling optional components
|
||||
****************************
|
||||
|
||||
CMake Options
|
||||
+++++++++++++
|
||||
|
||||
There are many options available in `CMake.
|
||||
<https://cmake.org/cmake/help/latest/guide/user-interaction/index.html#guide:User%20Interaction%20Guide>`_
|
||||
|
||||
Several of the most common ones are:
|
||||
|
||||
- ``-DCMAKE_BUILD_TYPE=Release`` (Set to Debug, if necessary)
|
||||
- ``-DBUILD_SHARED_LIBS=ON`` (Set to OFF to build OCIO as a static library)
|
||||
|
||||
Here are the most common OCIO-specific CMake options (the default values are shown):
|
||||
|
||||
- ``-DOCIO_BUILD_APPS=ON`` (Set to OFF to not build command-line tools)
|
||||
- ``-DOCIO_USE_OIIO_FOR_APPS=OFF`` (Set ON to build tools with OpenImageIO rather than OpenEXR)
|
||||
- ``-DOCIO_BUILD_PYTHON=ON`` (Set to OFF to not build the Python binding)
|
||||
- ``-DOCIO_BUILD_OPENFX=OFF`` (Set to ON to build the OpenFX plug-ins)
|
||||
- ``-DOCIO_USE_SSE=ON`` (Set to OFF to turn off SSE CPU performance optimizations)
|
||||
- ``-DOCIO_BUILD_TESTS=ON`` (Set to OFF to not build the unit tests)
|
||||
- ``-DOCIO_BUILD_GPU_TESTS=ON`` (Set to OFF to not build the GPU unit tests)
|
||||
- ``-DOCIO_USE_HEADLESS=OFF`` (Set to ON to do headless GPU reendering)
|
||||
- ``-DOCIO_WARNING_AS_ERROR=ON`` (Set to OFF to turn off warnings as errors)
|
||||
- ``-DOCIO_BUILD_DOCS=OFF`` (Set to ON to build the documentation)
|
||||
- ``-DOCIO_BUILD_FROZEN_DOCS=OFF`` (Set to ON to update the Python documentation)
|
||||
|
||||
Several command-line tools (such as ``ocioconvert``) require reading or writing image files.
|
||||
If ``OCIO_USE_OIIO_FOR_APPS=OFF``, these will be built using OpenEXR rather than OpenImageIO
|
||||
and therefore you will be limited to using OpenEXR files with these tools rather than the
|
||||
wider range of image file formats supported by OIIO. (Using OpenEXR for these tools works
|
||||
around the issue of a circular dependency between OCIO and OIIO that can complicate some
|
||||
build chains.)
|
||||
|
||||
The CMake output prints information regarding which image library will be used for the
|
||||
command-line tools (as well as a lot of other info about the build configuration).
|
||||
|
||||
|
||||
Documentation
|
||||
+++++++++++++
|
||||
|
||||
Instructions for installing the documentation pre-requisites and building the docs
|
||||
are in the section on :ref:`contributing documentation. <documentation-guidelines>`
|
||||
|
||||
To hint at Python package locations, add paths to the ``PYTHONPATH``
|
||||
environment variable prior to configuring the build.
|
||||
|
||||
.. _osx-and-linux:
|
||||
|
||||
OS X and Linux
|
||||
^^^^^^^^^^^^^^
|
||||
MacOS and Linux
|
||||
***************
|
||||
|
||||
While there is a huge range of possible setups, the following steps
|
||||
should work on OS X and most Linux distros. To keep things simple, this guide
|
||||
should work on macOS and most Linux distros. To keep things simple, this guide
|
||||
will use the following example paths - these will almost definitely be
|
||||
different for you:
|
||||
|
||||
@@ -196,12 +321,12 @@ First make the build directory and cd to it::
|
||||
$ mkdir /tmp/ociobuild
|
||||
$ cd /tmp/ociobuild
|
||||
|
||||
Next step is to run cmake, which looks for things such as the
|
||||
Next step is to run ``cmake``, which looks for things such as the
|
||||
compiler's required arguments, optional requirements like Python,
|
||||
OpenImageIO etc
|
||||
|
||||
For this example we will show how to install OCIO to a custom location
|
||||
(instead of the default ``/usr/local``), we will thus run cmake with
|
||||
(instead of the default ``/usr/local``), we will thus run ``cmake`` with
|
||||
``CMAKE_INSTALL_PREFIX``.
|
||||
|
||||
Still in ``/tmp/ociobuild``, run::
|
||||
@@ -209,8 +334,8 @@ Still in ``/tmp/ociobuild``, run::
|
||||
$ cmake -DCMAKE_INSTALL_PREFIX=/software/ocio /source/ocio
|
||||
|
||||
The last argument is the location of the OCIO source code (containing
|
||||
the main CMakeLists.txt file). You should see something along the
|
||||
lines of::
|
||||
the main CMakeLists.txt file). You should see it conclude with something
|
||||
along the lines of::
|
||||
|
||||
-- Configuring done
|
||||
-- Generating done
|
||||
@@ -231,25 +356,33 @@ the specified location::
|
||||
$ make install
|
||||
|
||||
If nothing went wrong, ``/software/ocio`` should look something like
|
||||
this::
|
||||
this (on Linux or macOS)::
|
||||
|
||||
$ cd /software/ocio
|
||||
$ ls
|
||||
bin/ include/ lib/
|
||||
bin/ include/ lib/ share/
|
||||
$ ls bin/
|
||||
ociobakelut ociocheck (and others ...)
|
||||
$ ls include/
|
||||
OpenColorIO/ PyOpenColorIO/ pkgconfig/
|
||||
OpenColorIO/
|
||||
$ ls lib/
|
||||
libOpenColorIO.a libOpenColorIO.dylib
|
||||
cmake/ libOpenColorIO.dylib (and some more specific versions ...)
|
||||
libOpenColorIOimageioapphelpers.a libOpenColorIOoglapphelpers.a
|
||||
pkgconfig/ python<version>/
|
||||
$ ls lib/pkgconfig
|
||||
OpenColorIO.pc
|
||||
$ ls lib/python<version>/site-packages
|
||||
PyOpenColorIO.so
|
||||
$ ls share/ocio
|
||||
setup_ocio.sh
|
||||
|
||||
.. _Windows 7 or newer:
|
||||
.. _Windows:
|
||||
|
||||
Windows 7 or newer
|
||||
^^^^^^^^^^^^^^^^^^
|
||||
Windows
|
||||
*******
|
||||
|
||||
While build environments may vary between users, the recommended way to build OCIO from source on
|
||||
Windows is to use the scripts provided in the Windows
|
||||
Windows 7 or newer is to use the scripts provided in the Windows
|
||||
`share <https://github.com/AcademySoftwareFoundation/OpenColorIO/tree/main/share/dev/windows>`_
|
||||
section of the OCIO repository. There are two scripts currently available.
|
||||
|
||||
@@ -270,7 +403,7 @@ Run this command to execute the ocio_deps.bat script::
|
||||
The second script is called
|
||||
`ocio.bat <https://github.com/AcademySoftwareFoundation/OpenColorIO/tree/main/share/dev/windows/ocio.bat>`_
|
||||
and it provide a way to configure and build OCIO from source. Moreover, this script executes the
|
||||
install step of cmake as well as the unit tests. The main use case is the following::
|
||||
install step of ``cmake`` as well as the unit tests. The main use case is the following::
|
||||
|
||||
ocio.bat --b <path to build folder> --i <path to install folder>
|
||||
--vcpkg <path to vcpkg installation> --ocio <path to ocio repository> --type Release
|
||||
@@ -282,39 +415,14 @@ For more information, please look at each script's documentation::
|
||||
|
||||
ocio_deps.bat --help
|
||||
|
||||
.. _enabling-optional-components:
|
||||
|
||||
Enabling optional components
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
The OpenColorIO library is probably not all you want - the Python
|
||||
libraries bindings, the Nuke nodes and several applications are only
|
||||
built if their dependencies are found.
|
||||
|
||||
In the case of the Python bindings, the dependencies are the Python
|
||||
headers for the version you wish to use. These may be picked up by
|
||||
default - if so, when you run cmake you would see::
|
||||
|
||||
-- Python 2.6 okay, will build the Python bindings against .../include/python2.6
|
||||
|
||||
If not, you can point cmake to correct Python executable using the
|
||||
``-D PYTHON=...`` cmake flag::
|
||||
|
||||
$ cmake -D PYTHON=/my/custom/python2.6 /source/ocio
|
||||
|
||||
The applications included with OCIO have various dependencies - to
|
||||
determine these, look at the CMake output when first run::
|
||||
|
||||
-- Not building ocioconvert. Requirement(s) found: OIIO:FALSE
|
||||
|
||||
|
||||
.. _quick-env-config:
|
||||
|
||||
Quick environment configuration
|
||||
*******************************
|
||||
===============================
|
||||
|
||||
The quickest way to set the required :ref:`environment-setup` is to
|
||||
source the ``share/ocio/setup_ocio.sh`` script installed with OCIO.
|
||||
On Windows, use the corresponding setup_ocio.bat file.
|
||||
|
||||
For a simple single-user setup, add the following to ``~/.bashrc``
|
||||
(assuming you are using bash, and the example install directory of
|
||||
@@ -336,7 +444,7 @@ configuration script etc), for example::
|
||||
.. _environment-setup:
|
||||
|
||||
Environment variables
|
||||
*********************
|
||||
=====================
|
||||
|
||||
Note: For other user facing environment variables, see :ref:`using_env_vars`.
|
||||
|
||||
@@ -345,7 +453,7 @@ Note: For other user facing environment variables, see :ref:`using_env_vars`.
|
||||
This variable needs to point to the global OCIO config file, e.g
|
||||
``config.ocio``
|
||||
|
||||
.. envvar:: DYLD_LIBRARY_PATH
|
||||
.. envvar:: DYLD_LIBRARY_PATH (macOS)
|
||||
|
||||
The ``lib/`` folder (containing ``libOpenColorIO.dylib``) must be
|
||||
on the ``DYLD_LIBRARY_PATH`` search path, or you will get an error
|
||||
@@ -356,11 +464,11 @@ Note: For other user facing environment variables, see :ref:`using_env_vars`.
|
||||
Reason: image not found
|
||||
|
||||
This applies to anything that links against OCIO, including the
|
||||
``PyOpenColorIO`` Python bindings.
|
||||
``PyOpenColorIO`` Python binding.
|
||||
|
||||
.. envvar:: LD_LIBRARY_PATH
|
||||
.. envvar:: LD_LIBRARY_PATH (Linux)
|
||||
|
||||
Equivalent to the ``DYLD_LIBRARY_PATH`` on Linux
|
||||
The Linux equivalent of the macOS ``DYLD_LIBRARY_PATH``.
|
||||
|
||||
.. envvar:: PYTHONPATH
|
||||
|
||||
|
||||
@@ -4,10 +4,12 @@
|
||||
|
||||
.. _upgrading_to_v2:
|
||||
|
||||
Upgrading to v2
|
||||
===============
|
||||
Releases
|
||||
========
|
||||
|
||||
.. toctree::
|
||||
:caption: Upgrading to v2
|
||||
|
||||
how_to
|
||||
ocio_2_2
|
||||
ocio_2_1
|
||||
ocio_2_0
|
||||
@@ -3,15 +3,15 @@
|
||||
Copyright Contributors to the OpenColorIO Project.
|
||||
|
||||
|
||||
Introduction
|
||||
============
|
||||
OCIO 2.0 Release
|
||||
================
|
||||
|
||||
OpenColorIO v2 is a major update, three years in development, and contains a
|
||||
large number of new features. This section describes the new features and
|
||||
their relevance for both config authors and application developers.
|
||||
|
||||
Timeline
|
||||
========
|
||||
********
|
||||
|
||||
OpenColorIO v2 was proposed to the community at SIGGRAPH 2017 and reached
|
||||
"feature complete" at SIGGRAPH 2020. The official 2.0.0 release was made in
|
||||
@@ -19,7 +19,7 @@ January 2021 after a period of stabilization and refinement. OCIO v2 is in
|
||||
the VFX Reference Platform for calendar year 2021.
|
||||
|
||||
Demo Config
|
||||
===========
|
||||
***********
|
||||
There is a config file that illustrates many of the new OCIO v2 features
|
||||
described below. This is available in the configs section of the documentation
|
||||
as :ref:`ocio-v2_demo`.
|
||||
@@ -641,3 +641,19 @@ processed.
|
||||
|
||||
**Developers**: This may be useful, for example, when displaying data color spaces on
|
||||
an HDR monitor.
|
||||
|
||||
|
||||
Release Notes
|
||||
=============
|
||||
|
||||
For more detail, please see the GitHub release pages:
|
||||
|
||||
`OCIO 2.0.0 <https://github.com/AcademySoftwareFoundation/OpenColorIO/releases/tag/v2.0.0>`_
|
||||
|
||||
`OCIO 2.0.1 <https://github.com/AcademySoftwareFoundation/OpenColorIO/releases/tag/v2.0.1>`_
|
||||
|
||||
`OCIO 2.0.2 <https://github.com/AcademySoftwareFoundation/OpenColorIO/releases/tag/v2.0.2>`_
|
||||
|
||||
`OCIO 2.0.3 <https://github.com/AcademySoftwareFoundation/OpenColorIO/releases/tag/v2.0.3>`_
|
||||
|
||||
`OCIO 2.0.4 <https://github.com/AcademySoftwareFoundation/OpenColorIO/releases/tag/v2.0.4>`_
|
||||
@@ -0,0 +1,173 @@
|
||||
..
|
||||
SPDX-License-Identifier: CC-BY-4.0
|
||||
Copyright Contributors to the OpenColorIO Project.
|
||||
|
||||
|
||||
OCIO 2.1 Release
|
||||
================
|
||||
|
||||
Timeline
|
||||
********
|
||||
|
||||
OpenColorIO 2.1 was delivered in August 2021 and is in the VFX Reference Platform for
|
||||
calendar year 2022.
|
||||
|
||||
New Features
|
||||
============
|
||||
|
||||
ACES 1.3 Gamut Compression
|
||||
**************************
|
||||
|
||||
ACES 1.3 introduced a scene-referred gamut compression algorithm that compresses
|
||||
colors captured by a camera into the AP1 gamut. This avoids artifacts that may
|
||||
occur downstream (such as in the ACES Output Transforms) for scene elements such
|
||||
as colored lights. This supersedes the earlier "Blue Light Artifact Fix" LMT.
|
||||
|
||||
`ACES RGC User Guide
|
||||
<https://www.dropbox.com/scl/fi/acuu6e626s14zlitpu2w8/ACES-1.3-Reference-Gamut-Compression-User-Guide.paper?dl=0&rlkey=bbbhneq62f6r85cptpcywu08n>`_
|
||||
|
||||
`ACES RGC Implementation Guide
|
||||
<https://www.dropbox.com/scl/fi/cousf6tispmegu4fpmpr2/ACES-Gamut-Compression-Implementation-Guide.paper?dl=0&rlkey=ul38rayi7imiiy4wjo3cektb2>`_
|
||||
|
||||
The implementation includes a BuiltinTransform for the ACES Reference Gamut Compression.
|
||||
Here's what that looks like in Config YAML::
|
||||
|
||||
!<BuiltinTransform> {style: ACES-LMT - ACES 1.3 Reference Gamut Compression}
|
||||
|
||||
There is also a FixedFunctionTransform for the underlying gamut compression algorithm.
|
||||
As described in the links above, it takes seven parameter values::
|
||||
|
||||
[ Limit_Cyan, Limit_Magenta, Limit_Yellow, Threshold_Cyan, Threshold_Magenta, Threshold_Yellow, Roll-off ].
|
||||
|
||||
Here is how that looks in Config YAML with the parameters set for the ACES 1.3 Reference Gamut
|
||||
Compression::
|
||||
|
||||
!<FixedFunctionTransform> {style: ACES_GamutComp13, params: [1.147, 1.264, 1.312, 0.815, 0.803, 0.88, 1.2]}
|
||||
|
||||
And here's how it looks in a CTF file::
|
||||
|
||||
<FixedFunction inBitDepth="32f" outBitDepth="32f" style="GamutComp13Fwd" params="1.147 1.264 1.312 0.815 0.803 0.88 1.2" />
|
||||
|
||||
**Config authors**: These new transforms may be used in configs with version 2.1 or higher
|
||||
and CTF files with version 2.1 or higher.
|
||||
|
||||
|
||||
OpenFX OCIO plug-ins
|
||||
********************
|
||||
|
||||
A framework to support OpenFX plug-ins has been added and example source code may be found
|
||||
in the vendor/openfx directory. The initial set consists of two plug-ins, one for applying
|
||||
a ColorSpaceTransform and another for applying a DisplayViewTransform.
|
||||
|
||||
Some screenshots of the UI may be found in `PR #1371.
|
||||
<https://github.com/AcademySoftwareFoundation/OpenColorIO/pull/1371>`_
|
||||
|
||||
**End users**: There are currently no pre-built executables available, so you will need to
|
||||
compile these yourself.
|
||||
|
||||
**Developers**: Set the CMake variable ``-D OCIO_BUILD_OPENFX=ON`` to build the plug-ins.
|
||||
|
||||
|
||||
Support for PyPI (pip install)
|
||||
******************************
|
||||
|
||||
Python wheel generation has been added and support for the `Python Package Index (PyPI).
|
||||
<https://pypi.org/project/opencolorio/>`_
|
||||
This allows you to easily install the OCIO Python bindings without needing to build from
|
||||
source or use one of the OS-specific package managers. The command is simply::
|
||||
|
||||
pip install opencolorio
|
||||
|
||||
|
||||
Support for emitting Open Shading Language (OSL)
|
||||
************************************************
|
||||
|
||||
The OCIO GPU Renderer may now emit shaders in `Open Shading Language
|
||||
<https://github.com/AcademySoftwareFoundation/OpenShadingLanguage>`_ format. There is a
|
||||
new GpuLanguage enum: ``LANGUAGE_OSL_1``.
|
||||
|
||||
Note that the OCIO library does not need to be compiled against the OSL library but running
|
||||
the OSL unit tests does require OSL and OIIO. These will be built automatically if CMake is
|
||||
able to find them or you set ``-D OSL_ROOT`` to indicate the installed location.
|
||||
|
||||
Currently, Lut1D and Lut3D Transforms are not supported and will throw an exception if used.
|
||||
All other transforms are supported. However, dynamic properties are currently locked to
|
||||
their initial values and may not be adjusted.
|
||||
|
||||
|
||||
Support for Apple Metal Shading Language and OpenGL ES
|
||||
******************************************************
|
||||
|
||||
The OCIO GPU Renderer may now emit shaders in these other new languages. The new
|
||||
GpuLanguage enums are:
|
||||
|
||||
* ``GPU_LANGUAGE_MSL_2_0``
|
||||
* ``GPU_LANGUAGE_GLSL_ES_3_0``
|
||||
* ``GPU_LANGUAGE_GLSL_ES_1_0``
|
||||
|
||||
|
||||
Test suite for the Academy/ASC Common LUT Format (CLF)
|
||||
******************************************************
|
||||
|
||||
The set of CLF test files was expanded and a set of Python scripts was added under
|
||||
``share/clf`` which were developed by the ACES Common LUT Format Implementation Working Group.
|
||||
The scripts allow use of the OpenColorIO renderers to process a sample image through each
|
||||
CLF file in the test suite and then compare the reference images to a set of corresponding
|
||||
images from another CLF implementation to see if the differences are within the tolerance
|
||||
allowed by the `CLF Implementation Guide. <https://docs.acescentral.com/guides/clf/>`_
|
||||
|
||||
|
||||
Imath 3 support
|
||||
***************
|
||||
|
||||
OCIO and its CI system now support Imath 3 for the Half data type dependency.
|
||||
|
||||
|
||||
Noteworthy API updates
|
||||
**********************
|
||||
|
||||
getColorSpaceFromFilePath
|
||||
+++++++++++++++++++++++++
|
||||
|
||||
``Config::getColorSpaceFromFilepath()`` is now the proper way to extract a color space from
|
||||
a file path, regardless of whether the config is version 1, or version 2 or higher. It
|
||||
works regardless of whether the config has FileRules defined. Therefore, the older
|
||||
``Config::parseColorSpaceFromString()`` method (which does not work with FileRules) is
|
||||
officially deprecated.
|
||||
|
||||
Note that ``Config::getColorSpaceFromFilepath()`` always returns a color space, regardless
|
||||
of whether the config's ``strictparsing`` attribute is true or false. This was a request from
|
||||
app developers that always need a default (which is a common scenario). Please see
|
||||
`Issue #1398 <https://github.com/AcademySoftwareFoundation/OpenColorIO/issues/1398>`_
|
||||
for more details on how to take special action if ``strictparsing`` is true.
|
||||
|
||||
|
||||
getDefaultView
|
||||
++++++++++++++
|
||||
There is a new ``Config::getDefaultView(display, colorspaceName)`` method that takes
|
||||
advantage of the ViewingRules feature that was introduced in OCIO 2.0. It returns the
|
||||
default view that is most appropriate for a given color space. If the color space is
|
||||
known, developers should call this rather than ``Config::getDefaultView(display)``.
|
||||
|
||||
The motivation is that the best view transform to use varies with the color space. For
|
||||
example, a scene-referred color space typically wants some kind of tone-map such as an
|
||||
ACES Output Transform. However, a display-referred color space will look wrong with such
|
||||
a view transform since it has already been tone-mapped.
|
||||
|
||||
One scenario where this new method is ideal is when an application needs to generate
|
||||
thumbnails for a large number of images that are in a variety of color spaces. Note that
|
||||
the config must have the Viewing Rules set in order to return different views, but if the
|
||||
rules are not set, it will still return the same result as ``Config::getDefaultView(display)``,
|
||||
so it may be used with either v1 or v2 configs.
|
||||
|
||||
|
||||
Release Notes
|
||||
=============
|
||||
|
||||
For more detail, please see the GitHub release pages:
|
||||
|
||||
`OCIO 2.1.0 <https://github.com/AcademySoftwareFoundation/OpenColorIO/releases/tag/v2.1.0>`_
|
||||
|
||||
`OCIO 2.1.1 <https://github.com/AcademySoftwareFoundation/OpenColorIO/releases/tag/v2.1.1>`_
|
||||
|
||||
`OCIO 2.1.2 <https://github.com/AcademySoftwareFoundation/OpenColorIO/releases/tag/v2.1.2>`_
|
||||
@@ -0,0 +1,395 @@
|
||||
..
|
||||
SPDX-License-Identifier: CC-BY-4.0
|
||||
Copyright Contributors to the OpenColorIO Project.
|
||||
|
||||
|
||||
OCIO 2.2 Release
|
||||
================
|
||||
|
||||
Timeline
|
||||
********
|
||||
|
||||
OpenColorIO 2.2 was delivered in October 2022 and is in the VFX Reference Platform for
|
||||
calendar year 2023.
|
||||
|
||||
|
||||
New Features
|
||||
============
|
||||
|
||||
Built-in Configs
|
||||
****************
|
||||
|
||||
The OCIO Configs Working Group has put a lot of effort into building new ACES configs that
|
||||
take advantage of the features of OCIO v2 and that are informed by the learnings from the
|
||||
previous ACES configs. The new configs are available from the project's GitHub repo:
|
||||
`OpenColorIO-Config-ACES
|
||||
<https://github.com/AcademySoftwareFoundation/OpenColorIO-Config-ACES/releases/tag/v1.0.0>`_
|
||||
|
||||
To make them easily accessible, they are built in to the library itself and may be
|
||||
accessed directly from within applications that incorporate the OCIO 2.2 library.
|
||||
|
||||
For Users
|
||||
+++++++++
|
||||
|
||||
Wherever you are able to provide a file path to a config, you may now provide a URI-type
|
||||
string to instead use one of the built-in configs. For example, you may use these strings
|
||||
for the OCIO environment variable.
|
||||
|
||||
To use the :ref:`aces_cg`, use this string for the config path::
|
||||
ocio://cg-config-v1.0.0_aces-v1.3_ocio-v2.1
|
||||
|
||||
To use the :ref:`aces_studio`, use this string for the config path::
|
||||
ocio://studio-config-v1.0.0_aces-v1.3_ocio-v2.1
|
||||
|
||||
This string will give you the current default config, which is currently the ACES CG Config::
|
||||
ocio://default
|
||||
|
||||
In future releases, it is expected that updated versions of these configs will be added,
|
||||
each with a unique name string. However, the previous strings will continue to be
|
||||
supported for backwards compatibility.
|
||||
|
||||
For Developers
|
||||
++++++++++++++
|
||||
|
||||
The new URI-type strings may be passed into the existing APIs such as ``CreateFromEnv``
|
||||
and ``CreateFromFile``. There is also a new ``CreateFromBuiltinConfig``. No changes
|
||||
should be needed, but please test that users of your application may use a path containing
|
||||
a URI-type string rather than a path to a config.ocio file.
|
||||
|
||||
If you'd like to offer the built-in configs from your user interface, there is an API to
|
||||
access them through the new ``BuiltinConfigRegistry``. Here is basic Python code to
|
||||
access the registry and print the strings to present in a UI::
|
||||
|
||||
registry = ocio.BuiltinConfigRegistry().getBuiltinConfigs()
|
||||
for item in registry:
|
||||
# The short_name is the URI-style name.
|
||||
# The ui_name is the name to use in a user interface.
|
||||
short_name, ui_name, isRecommended, isDefault = item
|
||||
|
||||
# Don't present built-in configs to users if they are no longer recommended.
|
||||
if isRecommended:
|
||||
print(ui_name)
|
||||
|
||||
Prints:
|
||||
|
||||
Academy Color Encoding System - CG Config [COLORSPACES v1.0.0] [ACES v1.3] [OCIO v2.1]
|
||||
|
||||
Academy Color Encoding System - Studio Config [COLORSPACES v1.0.0] [ACES v1.3] [OCIO v2.1]
|
||||
|
||||
If your application saves the path to a config and the user enters ``ocio://default``, it
|
||||
is recommended that you don't save that as is. Instead, call
|
||||
``getDefaultBuiltinConfigName`` to get the name of the current default. This is
|
||||
guaranteed to give the same results, whereas the default config could change somewhat
|
||||
between releases. Prepend ``ocio://`` in order to save it as a valid config path. Here's
|
||||
the Python code::
|
||||
|
||||
"ocio://" + ocio.BuiltinConfigRegistry().getDefaultBuiltinConfigName()
|
||||
|
||||
|
||||
Config Archiving
|
||||
****************
|
||||
|
||||
An OCIO config, including its external LUT files, may now be packaged into a single file.
|
||||
This makes it easier to distribute configs and may slightly discourage tampering with the
|
||||
contents. An archived config may be created with the new ``ocioarchive`` command-line
|
||||
tool and is stored in a file with the extension ``.ocioz``. It is basically a compressed
|
||||
ZIP archive of the config and its LUTs.
|
||||
|
||||
To be archivable, the external LUT files must be contained within (or below) the config's
|
||||
working directory. (In OCIO terminology, the "working directory" is the directory that
|
||||
contains the config.ocio file.)
|
||||
|
||||
A config is not archivable if any of the following are true:
|
||||
|
||||
* It contains FileTransforms with a src outside the working directory
|
||||
* The search path contains paths outside the working directory
|
||||
* The search path contains paths that start with a context variable
|
||||
* The working directory is not set (if archiving a Config object)
|
||||
|
||||
Context variables are allowed but the intent is that they may only resolve to paths that
|
||||
are within or below the working directory. This is because the archiving function will
|
||||
only archive files that are within the working directory in order to ensure that if it is
|
||||
later expanded, that it will not create any files outside this directory.
|
||||
|
||||
For example, a context variable on the search path intended to contain the name of a
|
||||
sub-directory under the working directory must have the form ``./$DIR_NAME`` rather than
|
||||
just ``$DIR_NAME`` to be considered archivable. This is imperfect since there is no way to
|
||||
prevent the context variable from creating a path outside the working dir, but it should
|
||||
at least draw attention to the fact that the archive would fail if used with context vars
|
||||
that try to abuse the intended functionality.
|
||||
|
||||
All files within or below the working directory that end with an extension corresponding
|
||||
to a LUT type supported by OCIO are added to the archive. This approach was taken since
|
||||
the goal was for the archive to work with any combination of context variables that the
|
||||
original config works with. Files with other extensions or no extension are not archived.
|
||||
|
||||
|
||||
For Users
|
||||
+++++++++
|
||||
|
||||
Wherever you are able to provide a file path to a config, you may now provide a path to a
|
||||
.ocioz file. For example, you may use this for the OCIO environment variable.
|
||||
|
||||
The ``ocioarchive`` command-line tool will allow you to archive a config or to expand an
|
||||
existing archive. It will also allow you to list the contents of an archived config. Run
|
||||
``ocioarchive --help`` to get a print-out of the various options.
|
||||
|
||||
The print out from the ``ociocheck`` command-line tool now includes a new line-item
|
||||
indicating whether the config is archivable.
|
||||
|
||||
For Developers
|
||||
++++++++++++++
|
||||
|
||||
The new .ocioz files may be passed into the existing APIs such as ``CreateFromEnv`` and
|
||||
``CreateFromFile``. No changes should be needed, but please test that users of your
|
||||
application may use a path containing a .ocioz file rather than a path to a config.ocio
|
||||
file.
|
||||
|
||||
The Config class has new ``isArchivable`` and ``archive`` methods. There is also an
|
||||
``ExtractOCIOZArchive`` function.
|
||||
|
||||
|
||||
Abstracting the Source of External LUT Files
|
||||
********************************************
|
||||
|
||||
The new ConfigIOProxy class allows the calling program to supply the config and any
|
||||
associated LUT files directly, without relying on the standard file system. This opens
|
||||
the door to expanded ways in which OCIO may be used.
|
||||
|
||||
The new config archiving feature was implemented using this mechanism.
|
||||
|
||||
For Developers
|
||||
++++++++++++++
|
||||
|
||||
Please refer to the ``ConfigIOProxy`` class. By implementing the ``getLutData``,
|
||||
``getConfigData``, and ``getFastLutFileHash`` methods, you have control over how the
|
||||
config is provided to OCIO. No file system access to a config is required.
|
||||
|
||||
The ``CreateFromConfigIOProxy`` factory allows for the creation of a Config object from a
|
||||
ConfigIOProxy object.
|
||||
|
||||
|
||||
Converting To or From a Known Color Space
|
||||
*****************************************
|
||||
|
||||
An OCIO config defines its own self-contained universe of color spaces. But there are not
|
||||
any requirements for color spaces which must always be included or how they must be named.
|
||||
This poses difficulties for many applications which need to convert to or from certain
|
||||
known standard color spaces. For example, a renderer might have a physical sun and sky
|
||||
model which produces colors in a CIE space and it needs to convert those into the
|
||||
rendering space defined by a user's custom OCIO config. Or an application may use an SDK
|
||||
to debayer images from a digital cinema camera. The SDK produces images in a specific
|
||||
color space which then needs to be processed into something viewable through a user's
|
||||
custom OCIO config.
|
||||
|
||||
For Developers
|
||||
++++++++++++++
|
||||
|
||||
OCIO v2 introduced the Interchange Roles to help address this problem but these had
|
||||
previously been optional and are unlikely to be included in OCIO v1 configs (although it
|
||||
would be perfectly legal to add them).
|
||||
|
||||
OCIO 2.2 introduces the new functions ``GetProcessorToBuiltinColorSpace`` and
|
||||
``GetProcessorFromBuiltinColorSpace`` that will allow you to convert to or from any of the
|
||||
color spaces in the built-in Default config (this is currently the ACES CG config
|
||||
described above). This built-in config includes common spaces such as "Linear Rec.709
|
||||
(sRGB)", "sRGB - Texture", "ACEScg", and "ACES2065-1".
|
||||
|
||||
If the source config defines the necessary Interchange Role (typically
|
||||
``aces_interchange``), then the conversion will be well-defined and equivalent to calling
|
||||
``GetProcessorFromConfigs`` with the source config and the Built-in config
|
||||
|
||||
However, if the Interchange Roles are not present, heuristics will be used to try and
|
||||
identify a common color space in the source config that may be used to allow the
|
||||
conversion to proceed. If the heuristics fail to find a suitable space, an exception is
|
||||
thrown. The heuristics may evolve, so the results returned by this function for a given
|
||||
source config and color space may change in future releases of the library. However, the
|
||||
Interchange Roles are required in config versions 2.2 and higher, so it is hoped that the
|
||||
need for the heuristics will decrease over time.
|
||||
|
||||
The current heuristics should work on any config (including an OCIO v1 config) that was
|
||||
generated by editing one of the ACES configs or any config that uses one of the following
|
||||
as its reference space:
|
||||
|
||||
* ACES2065-1
|
||||
* ACEScg
|
||||
* Scene-linear Rec.709 (sRGB)
|
||||
* Scene-linear Rec.2020
|
||||
* Scene-linear P3-D65
|
||||
|
||||
And that has a color space either for any of the above spaces or for an sRGB texture space
|
||||
that has "sRGB" (case-insensitive) in its color space name or one of its aliases.
|
||||
|
||||
Note that the heuristics create a Processor and evaluate color values that must match
|
||||
within a certain tolerance. No color space is selected purely based on its name alone.
|
||||
If the heuristics fail to find a recognized color space, an exception is thrown.
|
||||
|
||||
|
||||
Making the interchange roles required for config versions 2.2 or higher
|
||||
***********************************************************************
|
||||
|
||||
For Users
|
||||
+++++++++
|
||||
|
||||
Users were surveyed during the OCIO 2.2 development process as to whether the Interchange
|
||||
Roles should become mandatory. The response was overwhelmingly in favor of doing this,
|
||||
largely because it allows robust interchange of color spaces between configs or to
|
||||
external known standard color spaces.
|
||||
|
||||
Therefore, as described in the previous section, for config files of version 2.2 or
|
||||
higher, it is mandatory to define the ``aces_interchange`` role. If the config includes
|
||||
display color spaces, the ``cie_xyz_d65_interchange`` role is also required.
|
||||
|
||||
Note that the ``cie_xyz_d65_interchange`` is only used in connection with display color
|
||||
spaces (that is, with the display-referred connection space). It is not used for
|
||||
scene-referred color spaces, and indeed it is an error if a scene-referred space is
|
||||
assigned to that role.
|
||||
|
||||
The ``ociocheck`` command-line tool has been updated to make these checks. In addition,
|
||||
its reporting on other roles has been modified to be more lenient regarding roles which
|
||||
are no longer considered essential.
|
||||
|
||||
For Developers
|
||||
++++++++++++++
|
||||
|
||||
The Config::validate method will log an error if the Config object does not meet these
|
||||
requirements. Note that an exception is not thrown since it was felt that the Config's
|
||||
``upgradeToLatestVersion`` method must always produce a valid config.
|
||||
|
||||
|
||||
Determining if a Color Space is Linear
|
||||
**************************************
|
||||
|
||||
There have been many requests from developers that would like a standard way to determine
|
||||
if a color space is linear, since this impacts what sort of processing is suitable. OCIO
|
||||
v2 introduced a new ``encoding`` attribute for color spaces which contains this
|
||||
information. However, this is optional and may not be set by all config authors. And it
|
||||
won't be present in OCIO v1 configs, which are still widely used.
|
||||
|
||||
For Developers
|
||||
++++++++++++++
|
||||
|
||||
OCIO 2.2 adds a new ``isColorSpaceLinear`` method to the Config class which may be used
|
||||
for this purpose.
|
||||
|
||||
Note that since OCIO has both a scene-referred and a display-referred reference space, the
|
||||
method also takes a ReferenceSpaceType enum to indicate which reference space the
|
||||
linearity determination is with respect to. Typically developers will set this to
|
||||
``REFERENCE_SPACE_SCENE``.
|
||||
|
||||
The following algorithm is used to make the determination:
|
||||
|
||||
* If the color space ``isdata`` attribute is true, return false.
|
||||
* If the reference space type of the color space differs from the requested reference
|
||||
space type, return false.
|
||||
* If the color space's encoding attribute is present, return true if it matches the
|
||||
expected reference space type (i.e., "scene-linear" for ``REFERENCE_SPACE_SCENE`` or
|
||||
"display-linear" for ``REFERENCE_SPACE_DISPLAY``) and false otherwise.
|
||||
* If the color space has no ``to_reference`` or ``from_reference`` transform, return true.
|
||||
* Evaluate several points through the color space's transform and check if the output only
|
||||
differs by a scale factor (which may be different per channel, e.g. allowing an arbitrary
|
||||
matrix transform, with no offset).
|
||||
|
||||
Note that the last step is a heuristic that may or may not be accurate. However, note
|
||||
that the ``encoding`` attribute takes precedence and so config authors have the ultimate
|
||||
control over the linearity determination.
|
||||
|
||||
|
||||
Getting a Processor for a NamedTransform
|
||||
****************************************
|
||||
|
||||
For Developers
|
||||
++++++++++++++
|
||||
|
||||
A new config object was introduced in OCIO v2 called Named Transforms. These are used
|
||||
when there is a need to apply a mathematical function which is not a conversion between
|
||||
two specific color spaces. The most common example is applying a transfer function curve
|
||||
to convert linear data to non-linear, or vice-versa.
|
||||
|
||||
The new ACES configs include Named Transforms, so it is important for application
|
||||
developers to start supporting this type of config object. The preferred method for doing
|
||||
so is to add a new tool, similar to FileTransform that applies a Named Transform.
|
||||
|
||||
What is new in OCIO 2.2 is that the code for applying these is now simpler with the
|
||||
introduction of several new getProcessor methods on the Config class that will return a
|
||||
Processor directly from a NamedTransform object.
|
||||
|
||||
In addition, the NamedTransform class has a GetTransform method that returns a (regular)
|
||||
Transform object for a given direction. It will create the transform from the inverse
|
||||
direction if the transform for the requested direction is missing.
|
||||
|
||||
|
||||
Circular OCIO / OIIO Build Dependency Solution
|
||||
**********************************************
|
||||
|
||||
A long-standing complaint has been regarding the circular build dependency between OCIO
|
||||
and OpenImageIO. This is due to the fact that OIIO wants to use OCIO for color management
|
||||
and OCIO wants to use OIIO in its command-line tools ``ocioconvert``, ``ociolutimage``,
|
||||
and ``ociodisplay`` for reading and writing image files. These tools will not be built if
|
||||
OIIO is not available when configuring the build.
|
||||
|
||||
Furthermore, some package installers will not install these command-line tools due to the
|
||||
dependency on OIIO.
|
||||
|
||||
By default, OCIO will now build these tools with OpenEXR rather than relying on OIIO.
|
||||
|
||||
For Users
|
||||
+++++++++
|
||||
|
||||
If you have a version of OCIO that was not compiled with tools such as ``ocioconvert`` and
|
||||
you want to use OCIO to process images, you could try using OpenImageIO's ``oiiotool``.
|
||||
(Although note that ``ocioconvert`` has a few features that are not in ``oiiotool``, such
|
||||
as GPU processing support.) Similarly if you have ``ocioconvert``, but it is compiled
|
||||
with OpenEXR rather than OpenImageIO, you may use ``oiiotool`` to convert other image file
|
||||
formats to/from OpenEXR.
|
||||
|
||||
If you want to use ``oiiotool`` but it does not support a particular type of conversion,
|
||||
you may be able to use ``ociowrite`` to export a CTF file and then use that with the
|
||||
``--ociofiletransform`` option in ``oiiotool``.
|
||||
|
||||
For Developers
|
||||
++++++++++++++
|
||||
|
||||
In OCIO 2.2, by default, the build will now use OpenEXR rather than OpenImageIO for the
|
||||
command-line tools that read or write images. This will limit the functionality of the
|
||||
aforementioned command-line tools to only working with OpenEXR files. If you want support
|
||||
for more file formats in these tools, you will still need to have OIIO available when
|
||||
building OCIO and set the CMake variable ``-D OCIO_USE_OIIO_FOR_APPS=ON``.
|
||||
|
||||
|
||||
Miscellaneous Improvements
|
||||
**************************
|
||||
|
||||
Here are some other improvements in OCIO 2.2:
|
||||
|
||||
* Support for more types of ICC Monitor Profiles -- All of the parametric curve types are
|
||||
now supported.
|
||||
|
||||
* New hash function for calculating cache IDs -- The md5 algorithm has been replaced with
|
||||
xxhash, which provides a considerable speed-up for various operations. The APIs that
|
||||
return cache ID strings will obviously return different strings now, but please note that
|
||||
these are not guaranteed to be unchanged across releases. (The 128-bit version of xxhash
|
||||
was used, which is the same length as for md5.)
|
||||
|
||||
* The command-line tools ``ocioconvert``, ``ociowrite``, and ``ocioperf`` now support
|
||||
using an inverse DisplayViewTransform.
|
||||
|
||||
* Add DisplayViewTransform and NamedTransform support to Baker.
|
||||
|
||||
* Several new Built-in Transforms are available for version 2.2 config files, including
|
||||
ARRI LogC4.
|
||||
|
||||
* Preliminary support for ACES Metadata File (AMF) -- A prototype Python tool has been
|
||||
added named ``pyocioamf`` that converts an AMF file into the OCIO native transform format
|
||||
CTF. It uses a prototype ACES Reference config file that is serving as a database of ACES
|
||||
Transform IDs for interpreting the AMF file.
|
||||
|
||||
* Support for PyPI installation from source rather than pre-built binaries.
|
||||
|
||||
|
||||
Release Notes
|
||||
=============
|
||||
|
||||
For more detail, please see the GitHub release pages:
|
||||
|
||||
`OCIO 2.2.0 <https://github.com/AcademySoftwareFoundation/OpenColorIO/releases/tag/v2.2.0>`_
|
||||
@@ -30,7 +30,7 @@
|
||||
.. toctree::
|
||||
:hidden:
|
||||
|
||||
upgrading_v2/_index
|
||||
releases/_index
|
||||
|
||||
.. toctree::
|
||||
:hidden:
|
||||
|
||||
@@ -459,14 +459,25 @@ public:
|
||||
const char * getEnvironmentVarDefault(const char * name) const;
|
||||
void clearEnvironmentVars();
|
||||
|
||||
/**
|
||||
* \brief The EnvironmentMode controls the behavior of loadEnvironment.
|
||||
* * ENV_ENVIRONMENT_LOAD_PREDEFINED - Only update vars already added to the Context.
|
||||
* * ENV_ENVIRONMENT_LOAD_ALL - Load all env. vars into the Context.
|
||||
*
|
||||
* \note Loading ALL the env. vars may reduce performance and reduce cache efficiency.
|
||||
*
|
||||
* Client programs generally will not use these methods because the EnvironmentMode is
|
||||
* set automatically when a Config is loaded. If the Config has an "environment"
|
||||
* section, the mode is set to LOAD_PREDEFINED, and otherwise set to LOAD_ALL.
|
||||
*/
|
||||
void setEnvironmentMode(EnvironmentMode mode) noexcept;
|
||||
EnvironmentMode getEnvironmentMode() const noexcept;
|
||||
/// Initialize the environment/context variables in the Config's Context.
|
||||
void loadEnvironment() noexcept;
|
||||
|
||||
const char * getSearchPath() const;
|
||||
/**
|
||||
* \brief Set all search paths as a concatenated string, ':' to separate the
|
||||
* paths.
|
||||
* \brief Set all search paths as a concatenated string, use ':' to separate the paths.
|
||||
*
|
||||
* See \ref addSearchPath for a more robust and platform-agnostic method of
|
||||
* setting the search paths.
|
||||
@@ -3442,8 +3453,9 @@ public:
|
||||
void setWorkingDir(const char * dirname);
|
||||
const char * getWorkingDir() const;
|
||||
|
||||
/// Add (or update) a context variable. But it removes it if the value argument
|
||||
/// is null.
|
||||
/// Add (or update) a context variable. But it removes it if the value argument is null.
|
||||
/// Note that a Context StringVar is the same thing as a Config EnvironmentVar and these
|
||||
/// are both often referred to as a "context var".
|
||||
void setStringVar(const char * name, const char * value) noexcept;
|
||||
/// Get the context variable value. It returns an empty string if the context
|
||||
/// variable is null or does not exist.
|
||||
@@ -3459,13 +3471,11 @@ public:
|
||||
/// Add to the instance all the context variables from ctx.
|
||||
void addStringVars(const ConstContextRcPtr & ctx) noexcept;
|
||||
|
||||
|
||||
/// See \ref Config::setEnvironmentMode.
|
||||
void setEnvironmentMode(EnvironmentMode mode) noexcept;
|
||||
|
||||
|
||||
EnvironmentMode getEnvironmentMode() const noexcept;
|
||||
|
||||
/// Seed all string vars with the current environment.
|
||||
/// Seed string vars with the current environment, based on the EnvironmentMode setting.
|
||||
void loadEnvironment() noexcept;
|
||||
|
||||
/// Resolve all the context variables from the string. It could be color space
|
||||
|
||||
@@ -456,11 +456,12 @@ enum GpuLanguage
|
||||
GPU_LANGUAGE_MSL_2_0 ///< Metal Shading Language
|
||||
};
|
||||
|
||||
/// Controls which environment variables are loaded into a Context object.
|
||||
enum EnvironmentMode
|
||||
{
|
||||
ENV_ENVIRONMENT_UNKNOWN = 0,
|
||||
ENV_ENVIRONMENT_LOAD_PREDEFINED,
|
||||
ENV_ENVIRONMENT_LOAD_ALL
|
||||
ENV_ENVIRONMENT_LOAD_PREDEFINED, ///< Only load vars in the config's environment section
|
||||
ENV_ENVIRONMENT_LOAD_ALL ///< Load all env. vars (note: may reduce performance)
|
||||
};
|
||||
|
||||
/// A RangeTransform may be set to clamp the values, or not.
|
||||
|
||||
Executable
+57
@@ -0,0 +1,57 @@
|
||||
#!/usr/bin/env bash
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# Copyright Contributors to the OpenColorIO Project.
|
||||
|
||||
set -ex
|
||||
|
||||
MINIZIPNG_VERSION="$1"
|
||||
INSTALL_TARGET="$2"
|
||||
|
||||
MINIZIPNG_MAJOR_MINOR=$(echo "${MINIZIPNG_VERSION}" | cut -d. -f-2)
|
||||
MINIZIPNG_MAJOR=$(echo "${MINIZIPNG_VERSION}" | cut -d. -f-1)
|
||||
MINIZIPNG_MINOR=$(echo "${MINIZIPNG_MAJOR_MINOR}" | cut -d. -f2-)
|
||||
MINIZIPNG_PATCH=$(echo "${MINIZIPNG_VERSION}" | cut -d. -f3-)
|
||||
MINIZIPNG_VERSION_U="${MINIZIPNG_MAJOR}.${MINIZIPNG_MINOR}.${MINIZIPNG_PATCH}"
|
||||
|
||||
git clone https://github.com/zlib-ng/minizip-ng
|
||||
cd minizip-ng
|
||||
|
||||
if [ "$MINIZIPNG_VERSION" == "latest" ]; then
|
||||
LATEST_TAG=$(git describe --abbrev=0 --tags)
|
||||
git checkout tags/${LATEST_TAG} -b ${LATEST_TAG}
|
||||
else
|
||||
git checkout tags/${MINIZIPNG_VERSION_U} -b ${MINIZIPNG_VERSION_U}
|
||||
fi
|
||||
|
||||
mkdir build
|
||||
cd build
|
||||
|
||||
cmake -DCMAKE_BUILD_TYPE=Release \
|
||||
${INSTALL_TARGET:+"-DCMAKE_INSTALL_PREFIX="${INSTALL_TARGET}""} \
|
||||
-DCMAKE_POSITION_INDEPENDENT_CODE=ON \
|
||||
-DBUILD_SHARED_LIBS=OFF \
|
||||
-DMZ_OPENSSL=OFF \
|
||||
-DMZ_LIBBSD=OFF \
|
||||
-DMZ_BUILD_TESTS=OFF \
|
||||
-DMZ_COMPAT=OFF \
|
||||
-DMZ_BZIP2=OFF \
|
||||
-DMZ_LZMA=OFF \
|
||||
-DMZ_LIBCOMP=OFF \
|
||||
-DMZ_ZSTD=OFF \
|
||||
-DMZ_PKCRYPT=OFF \
|
||||
-DMZ_WZAES=OFF \
|
||||
-DMZ_SIGNING=OFF \
|
||||
-DMZ_ZLIB=ON \
|
||||
-DMZ_ICONV=OFF \
|
||||
-DMZ_FETCH_LIBS=OFF \
|
||||
-DMZ_FORCE_FETCH_LIBS=OFF \
|
||||
-DZLIB_LIBRARY=${INSTALL_TARGET}/${CMAKE_INSTALL_LIBDIR} \
|
||||
-DZLIB_INCLUDE_DIR=${INSTALL_TARGET}/include \
|
||||
../.
|
||||
cmake --build . \
|
||||
--target install \
|
||||
--config Release \
|
||||
--parallel 2
|
||||
|
||||
cd ../..
|
||||
rm -rf minizip-ng
|
||||
Executable
+40
@@ -0,0 +1,40 @@
|
||||
#!/usr/bin/env bash
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# Copyright Contributors to the OpenColorIO Project.
|
||||
|
||||
set -ex
|
||||
|
||||
ZLIB_VERSION="$1"
|
||||
INSTALL_TARGET="$2"
|
||||
|
||||
ZLIB_MAJOR_MINOR=$(echo "${ZLIB_VERSION}" | cut -d. -f-2)
|
||||
ZLIB_MAJOR=$(echo "${ZLIB_VERSION}" | cut -d. -f-1)
|
||||
ZLIB_MINOR=$(echo "${ZLIB_MAJOR_MINOR}" | cut -d. -f2-)
|
||||
ZLIB_PATCH=$(echo "${ZLIB_VERSION}" | cut -d. -f3-)
|
||||
ZLIB_VERSION_U="${ZLIB_MAJOR}.${ZLIB_MINOR}.${ZLIB_PATCH}"
|
||||
|
||||
git clone https://github.com/madler/zlib
|
||||
cd zlib
|
||||
|
||||
if [ "$ZLIB_VERSION" == "latest" ]; then
|
||||
LATEST_TAG=$(git describe --abbrev=0 --tags)
|
||||
git checkout tags/${LATEST_TAG} -b ${LATEST_TAG}
|
||||
else
|
||||
git checkout tags/v${ZLIB_VERSION_U} -b v${ZLIB_VERSION_U}
|
||||
fi
|
||||
|
||||
mkdir build
|
||||
cd build
|
||||
|
||||
cmake -DCMAKE_BUILD_TYPE=Release \
|
||||
${INSTALL_TARGET:+"-DCMAKE_INSTALL_PREFIX="${INSTALL_TARGET}""} \
|
||||
-DCMAKE_POSITION_INDEPENDENT_CODE=ON \
|
||||
-DBUILD_SHARED_LIBS=OFF \
|
||||
../.
|
||||
cmake --build . \
|
||||
--target install \
|
||||
--config Release \
|
||||
--parallel 2
|
||||
|
||||
cd ../..
|
||||
rm -rf zlib
|
||||
@@ -21,6 +21,17 @@ set(CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY ON CACHE BOOL
|
||||
set(CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY ON CACHE BOOL
|
||||
"Disable CMake System Package Registry when finding packages")
|
||||
|
||||
if (APPLE)
|
||||
# Store the previous value of CMAKE_FIND_FRAMEWORK and CMAKE_FIND_APPBUNDLE.
|
||||
set(_PREVIOUS_CMAKE_FIND_FRAMEWORK ${CMAKE_FIND_FRAMEWORK})
|
||||
set(_PREVIOUS_CMAKE_FIND_APPBUNDLE ${CMAKE_FIND_APPBUNDLE})
|
||||
|
||||
# Prioritize other paths before Frameworks and Appbundle for find_path, find_library and
|
||||
# find_package.
|
||||
set(CMAKE_FIND_FRAMEWORK LAST)
|
||||
set(CMAKE_FIND_APPBUNDLE LAST)
|
||||
endif()
|
||||
|
||||
###############################################################################
|
||||
### Packages and versions ###
|
||||
|
||||
@@ -41,14 +52,93 @@ find_package(pystring 1.1.3 REQUIRED)
|
||||
set(_Imath_ExternalProject_VERSION "3.1.5")
|
||||
find_package(Imath 3.0 REQUIRED)
|
||||
|
||||
# ZLIB
|
||||
# https://github.com/madler/zlib
|
||||
set(_zlib_ExternalProject_VERSION "1.2.12")
|
||||
find_package(zlib REQUIRED)
|
||||
###############################################################################
|
||||
### ZLIB (https://github.com/madler/zlib)
|
||||
###
|
||||
### The following variables can be set:
|
||||
### ZLIB_ROOT Location of ZLIB library file and includes folder.
|
||||
### Alternatively, ZLIB_LIBRARY and ZLIB_INCLUDE_DIR can be used.
|
||||
###
|
||||
### ZLIB_LIBRARY Location of ZLIB library file.
|
||||
### ZLIB_INCLUDE_DIR Location of ZLIB includes folder.
|
||||
###
|
||||
### ZLIB_VERSION ZLIB Version (CMake 3.26+)
|
||||
### ZLIB_VERSION_STRING ZLIB Version (CMake < 3.26)
|
||||
###
|
||||
###############################################################################
|
||||
# ZLIB 1.2.13 is used since it fixes a critical vulnerability.
|
||||
# See https://nvd.nist.gov/vuln/detail/CVE-2022-37434
|
||||
# See https://github.com/madler/zlib/releases/tag/v1.2.13
|
||||
set(_ZLIB_FIND_VERSION "1.2.13")
|
||||
set(_ZLIB_ExternalProject_VERSION ${_ZLIB_FIND_VERSION})
|
||||
|
||||
if(NOT OCIO_INSTALL_EXT_PACKAGES STREQUAL ALL)
|
||||
# ZLIB_USE_STATIC_LIBS is supported only from CMake 3.24+.
|
||||
if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.24.0")
|
||||
if (ZLIB_STATIC_LIBRARY)
|
||||
set(ZLIB_USE_STATIC_LIBS "${ZLIB_STATIC_LIBRARY}")
|
||||
endif()
|
||||
else() # For CMake < 3.24 since ZLIB_USE_STATIC_LIBS is not available.
|
||||
if(NOT ZLIB_LIBRARY)
|
||||
if(DEFINED CMAKE_FIND_LIBRARY_PREFIXES)
|
||||
set(_ZLIB_ORIG_CMAKE_FIND_LIBRARY_PREFIXES "${CMAKE_FIND_LIBRARY_PREFIXES}")
|
||||
else()
|
||||
set(_ZLIB_ORIG_CMAKE_FIND_LIBRARY_PREFIXES)
|
||||
endif()
|
||||
|
||||
if(DEFINED CMAKE_FIND_LIBRARY_SUFFIXES)
|
||||
set(_ZLIB_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES "${CMAKE_FIND_LIBRARY_SUFFIXES}")
|
||||
else()
|
||||
set(_ZLIB_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES)
|
||||
endif()
|
||||
|
||||
# Prefix/suffix for windows.
|
||||
if(WIN32)
|
||||
list(APPEND CMAKE_FIND_LIBRARY_PREFIXES "" "lib")
|
||||
list(APPEND CMAKE_FIND_LIBRARY_SUFFIXES ".dll.a")
|
||||
endif()
|
||||
|
||||
# Check if static lib is preferred.
|
||||
if(ZLIB_STATIC_LIBRARY OR ZLIB_USE_STATIC_LIBS)
|
||||
if(WIN32)
|
||||
set(CMAKE_FIND_LIBRARY_SUFFIXES .lib .a ${CMAKE_FIND_LIBRARY_SUFFIXES})
|
||||
else()
|
||||
set(CMAKE_FIND_LIBRARY_SUFFIXES .a)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
set(_ZLIB_REQUIRED REQUIRED)
|
||||
# Override REQUIRED if package can be installed
|
||||
if(OCIO_INSTALL_EXT_PACKAGES STREQUAL MISSING)
|
||||
set(_ZLIB_REQUIRED "")
|
||||
endif()
|
||||
|
||||
find_package(ZLIB ${_ZLIB_FIND_VERSION} ${_ZLIB_REQUIRED})
|
||||
|
||||
# Restore the original find library ordering
|
||||
if(DEFINED _ZLIB_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES)
|
||||
set(CMAKE_FIND_LIBRARY_SUFFIXES "${_ZLIB_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES}")
|
||||
else()
|
||||
set(CMAKE_FIND_LIBRARY_SUFFIXES)
|
||||
endif()
|
||||
|
||||
if(DEFINED _ZLIB_ORIG_CMAKE_FIND_LIBRARY_PREFIXES)
|
||||
set(CMAKE_FIND_LIBRARY_PREFIXES "${_ZLIB_ORIG_CMAKE_FIND_LIBRARY_PREFIXES}")
|
||||
else()
|
||||
set(CMAKE_FIND_LIBRARY_PREFIXES)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(NOT ZLIB_FOUND AND OCIO_INSTALL_EXT_PACKAGES AND NOT OCIO_INSTALL_EXT_PACKAGES STREQUAL NONE)
|
||||
include(InstallZLIB)
|
||||
endif()
|
||||
###############################################################################
|
||||
|
||||
# minizip-ng
|
||||
# https://github.com/zlib-ng/minizip-ng
|
||||
find_package(minizip-ng 3.0.6 REQUIRED)
|
||||
find_package(minizip-ng 3.0.7 REQUIRED)
|
||||
|
||||
if(OCIO_BUILD_APPS)
|
||||
|
||||
@@ -157,3 +247,9 @@ if(OCIO_BUILD_TESTS)
|
||||
message(WARNING "Could NOT find OpenImageIO. Skipping build of the OSL unit tests.")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if (APPLE)
|
||||
# Restore CMAKE_FIND_FRAMEWORK and CMAKE_FIND_APPBUNDLE values.
|
||||
set(CMAKE_FIND_FRAMEWORK ${_PREVIOUS_CMAKE_FIND_FRAMEWORK})
|
||||
set(CMAKE_FIND_APPBUNDLE ${_PREVIOUS_CMAKE_FIND_APPBUNDLE})
|
||||
endif()
|
||||
|
||||
@@ -25,6 +25,15 @@
|
||||
###############################################################################
|
||||
### Try to find package ###
|
||||
|
||||
# BUILD_TYPE_DEBUG variable is currently set in one of the OCIO's CMake files.
|
||||
# Now that some OCIO's find module are installed with the library itself (with static build),
|
||||
# a consumer app don't have access to the variables set by an OCIO's CMake files. Therefore, some
|
||||
# OCIO's find modules must detect the build type by itselves.
|
||||
set(BUILD_TYPE_DEBUG OFF)
|
||||
if(CMAKE_BUILD_TYPE MATCHES "[Dd][Ee][Bb][Uu][Gg]")
|
||||
set(BUILD_TYPE_DEBUG ON)
|
||||
endif()
|
||||
|
||||
if(NOT OCIO_INSTALL_EXT_PACKAGES STREQUAL ALL)
|
||||
set(_Imath_REQUIRED_VARS Imath_LIBRARY)
|
||||
set(_Imath_LIB_VER "${Imath_FIND_VERSION_MAJOR}_${Imath_FIND_VERSION_MINOR}")
|
||||
@@ -131,7 +140,7 @@ endif()
|
||||
###############################################################################
|
||||
### Install package from source ###
|
||||
|
||||
if(NOT Imath_FOUND AND NOT OCIO_INSTALL_EXT_PACKAGES STREQUAL NONE)
|
||||
if(NOT Imath_FOUND AND OCIO_INSTALL_EXT_PACKAGES AND NOT OCIO_INSTALL_EXT_PACKAGES STREQUAL NONE)
|
||||
include(ExternalProject)
|
||||
include(GNUInstallDirs)
|
||||
|
||||
|
||||
@@ -45,6 +45,10 @@ if(NOT OCIO_INSTALL_EXT_PACKAGES STREQUAL ALL)
|
||||
if(OpenEXR_FOUND)
|
||||
get_target_property(OpenEXR_LIBRARY OpenEXR::OpenEXR LOCATION)
|
||||
get_target_property(OpenEXR_INCLUDE_DIR OpenEXR::OpenEXR INTERFACE_INCLUDE_DIRECTORIES)
|
||||
|
||||
# IMPORTED_GLOBAL property must be set to TRUE since alisasing a non-global imported target
|
||||
# is not possible until CMake 3.18+.
|
||||
set_target_properties(OpenEXR::OpenEXR PROPERTIES IMPORTED_GLOBAL TRUE)
|
||||
endif()
|
||||
|
||||
# Override REQUIRED if package can be installed
|
||||
@@ -77,7 +81,7 @@ macro(set_target_location target_name)
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
if(NOT OpenEXR_FOUND AND NOT OCIO_INSTALL_EXT_PACKAGES STREQUAL NONE)
|
||||
if(NOT OpenEXR_FOUND AND OCIO_INSTALL_EXT_PACKAGES AND NOT OCIO_INSTALL_EXT_PACKAGES STREQUAL NONE)
|
||||
include(ExternalProject)
|
||||
include(GNUInstallDirs)
|
||||
|
||||
@@ -85,13 +89,14 @@ if(NOT OpenEXR_FOUND AND NOT OCIO_INSTALL_EXT_PACKAGES STREQUAL NONE)
|
||||
set(_EXT_BUILD_ROOT "${CMAKE_BINARY_DIR}/ext/build")
|
||||
|
||||
# Required dependency
|
||||
# OCIO custom module to find ZLIB. (Findzlib)
|
||||
find_package(zlib)
|
||||
if(NOT ZLIB_FOUND)
|
||||
message(STATUS "ZLib is required to build OpenEXR.")
|
||||
return()
|
||||
find_package(ZLIB)
|
||||
if(NOT ZLIB_FOUND)
|
||||
message(STATUS "ZLib is required to build OpenEXR.")
|
||||
return()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
|
||||
find_package(Threads)
|
||||
if(NOT Threads_FOUND)
|
||||
message(STATUS "Threads is required to build OpenEXR.")
|
||||
|
||||
@@ -25,6 +25,15 @@
|
||||
###############################################################################
|
||||
### Try to find package ###
|
||||
|
||||
# BUILD_TYPE_DEBUG variable is currently set in one of the OCIO's CMake files.
|
||||
# Now that some OCIO's find module are installed with the library itself (with static build),
|
||||
# a consumer app don't have access to the variables set by an OCIO's CMake files. Therefore, some
|
||||
# OCIO's find modules must detect the build type by itselves.
|
||||
set(BUILD_TYPE_DEBUG OFF)
|
||||
if(CMAKE_BUILD_TYPE MATCHES "[Dd][Ee][Bb][Uu][Gg]")
|
||||
set(BUILD_TYPE_DEBUG ON)
|
||||
endif()
|
||||
|
||||
if(NOT OCIO_INSTALL_EXT_PACKAGES STREQUAL ALL)
|
||||
set(_expat_REQUIRED_VARS expat_LIBRARY)
|
||||
|
||||
@@ -87,21 +96,58 @@ if(NOT OCIO_INSTALL_EXT_PACKAGES STREQUAL ALL)
|
||||
expat/include
|
||||
)
|
||||
|
||||
|
||||
# Expat uses prefix "lib" on all platform by default.
|
||||
# Library name doesn't change in debug.
|
||||
|
||||
# For Windows, see https://github.com/libexpat/libexpat/blob/R_2_2_8/expat/win32/README.txt.
|
||||
# libexpat<postfix=[w][d][MD|MT]>.lib
|
||||
# The "w" indicates the UTF-16 version of the library.
|
||||
|
||||
# Lib names to search for
|
||||
set(_expat_LIB_NAMES expat libexpat)
|
||||
set(_expat_LIB_NAMES libexpat expat)
|
||||
|
||||
if(WIN32 AND BUILD_TYPE_DEBUG)
|
||||
# Prefer Debug lib names (Windows only)
|
||||
list(INSERT _expat_LIB_NAMES 0 expatd)
|
||||
# Prefer Debug lib names. The library name changes only on Windows.
|
||||
list(INSERT _expat_LIB_NAMES 0 libexpatd libexpatwd expatd expatwd)
|
||||
elseif(WIN32)
|
||||
# libexpat(w).dll/.lib
|
||||
list(APPEND _expat_LIB_NAMES libexpatw expatw)
|
||||
endif()
|
||||
|
||||
if(expat_STATIC_LIBRARY)
|
||||
# Looking for both "lib" prefix and CMAKE_STATIC_LIBRARY_PREFIX.
|
||||
# Prefer static lib names
|
||||
set(_expat_STATIC_LIB_NAMES
|
||||
set(_expat_STATIC_LIB_NAMES
|
||||
"libexpat${CMAKE_STATIC_LIBRARY_SUFFIX}"
|
||||
"${CMAKE_STATIC_LIBRARY_PREFIX}expat${CMAKE_STATIC_LIBRARY_SUFFIX}")
|
||||
|
||||
if(WIN32 AND BUILD_TYPE_DEBUG)
|
||||
# Prefer static Debug lib names (Windows only)
|
||||
# Prefer static Debug lib names. The library name changes only on Windows.
|
||||
list(INSERT _expat_STATIC_LIB_NAMES 0
|
||||
"${CMAKE_STATIC_LIBRARY_PREFIX}expatd${CMAKE_STATIC_LIBRARY_SUFFIX}")
|
||||
"libexpatdMD${CMAKE_STATIC_LIBRARY_SUFFIX}"
|
||||
"libexpatdMT${CMAKE_STATIC_LIBRARY_SUFFIX}"
|
||||
"libexpatd${CMAKE_STATIC_LIBRARY_SUFFIX}"
|
||||
"libexpatwdMD${CMAKE_STATIC_LIBRARY_SUFFIX}"
|
||||
"libexpatwdMT${CMAKE_STATIC_LIBRARY_SUFFIX}"
|
||||
"libexpatwd${CMAKE_STATIC_LIBRARY_SUFFIX}"
|
||||
"${CMAKE_STATIC_LIBRARY_PREFIX}expatdMD${CMAKE_STATIC_LIBRARY_SUFFIX}"
|
||||
"${CMAKE_STATIC_LIBRARY_PREFIX}expatdMT${CMAKE_STATIC_LIBRARY_SUFFIX}"
|
||||
"${CMAKE_STATIC_LIBRARY_PREFIX}expatd${CMAKE_STATIC_LIBRARY_SUFFIX}"
|
||||
"${CMAKE_STATIC_LIBRARY_PREFIX}expatwdMD${CMAKE_STATIC_LIBRARY_SUFFIX}"
|
||||
"${CMAKE_STATIC_LIBRARY_PREFIX}expatwdMT${CMAKE_STATIC_LIBRARY_SUFFIX}"
|
||||
"${CMAKE_STATIC_LIBRARY_PREFIX}expatwd${CMAKE_STATIC_LIBRARY_SUFFIX}")
|
||||
elseif (WIN32)
|
||||
list(INSERT _expat_STATIC_LIB_NAMES 0
|
||||
"libexpatMD${CMAKE_STATIC_LIBRARY_SUFFIX}"
|
||||
"libexpatMT${CMAKE_STATIC_LIBRARY_SUFFIX}"
|
||||
"libexpatwMD${CMAKE_STATIC_LIBRARY_SUFFIX}"
|
||||
"libexpatwMT${CMAKE_STATIC_LIBRARY_SUFFIX}"
|
||||
"${CMAKE_STATIC_LIBRARY_PREFIX}expatMD${CMAKE_STATIC_LIBRARY_SUFFIX}"
|
||||
"${CMAKE_STATIC_LIBRARY_PREFIX}expatMT${CMAKE_STATIC_LIBRARY_SUFFIX}"
|
||||
"${CMAKE_STATIC_LIBRARY_PREFIX}expatwMD${CMAKE_STATIC_LIBRARY_SUFFIX}"
|
||||
"${CMAKE_STATIC_LIBRARY_PREFIX}expatwMT${CMAKE_STATIC_LIBRARY_SUFFIX}"
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
@@ -162,7 +208,7 @@ endif()
|
||||
###############################################################################
|
||||
### Install package from source ###
|
||||
|
||||
if(NOT expat_FOUND AND NOT OCIO_INSTALL_EXT_PACKAGES STREQUAL NONE)
|
||||
if(NOT expat_FOUND AND OCIO_INSTALL_EXT_PACKAGES AND NOT OCIO_INSTALL_EXT_PACKAGES STREQUAL NONE)
|
||||
include(ExternalProject)
|
||||
include(GNUInstallDirs)
|
||||
|
||||
|
||||
@@ -97,7 +97,7 @@ endif()
|
||||
###############################################################################
|
||||
### Install package from source ###
|
||||
|
||||
if(NOT lcms2_FOUND AND NOT OCIO_INSTALL_EXT_PACKAGES STREQUAL NONE)
|
||||
if(NOT lcms2_FOUND AND OCIO_INSTALL_EXT_PACKAGES AND NOT OCIO_INSTALL_EXT_PACKAGES STREQUAL NONE)
|
||||
include(ExternalProject)
|
||||
|
||||
set(_EXT_DIST_ROOT "${CMAKE_BINARY_DIR}/ext/dist")
|
||||
|
||||
@@ -10,21 +10,86 @@
|
||||
# minizip-ng_VERSION - The version of the library
|
||||
#
|
||||
# Targets defined by this module:
|
||||
# minizip-ng::minizip-ng - IMPORTED target, if found
|
||||
# MINIZIP::minizip-ng - IMPORTED target, if found
|
||||
#
|
||||
# If minizip-ng is not installed in a standard path, you can use the minizip-ng_ROOT
|
||||
# variable to tell CMake where to find it. If it is not found and
|
||||
# OCIO_INSTALL_EXT_PACKAGES is set to MISSING or ALL, minizip-ng will be downloaded,
|
||||
# built, and statically-linked into libOpenColorIO at build time.
|
||||
#
|
||||
# For external builds of minizip-ng, please note that the same build options should be used.
|
||||
# Using more options, such as enabling other compression methods, will provoke linking issue
|
||||
# since OCIO is not linking to those libraries.
|
||||
#
|
||||
# e.g. Setting MZ_BZIP2=ON will cause linking issue since OCIO will not be linked against BZIP2.
|
||||
#
|
||||
###############################################################################
|
||||
### Try to find package ###
|
||||
|
||||
# BUILD_TYPE_DEBUG variable is currently set in one of the OCIO's CMake files.
|
||||
# Now that some OCIO's find module are installed with the library itself (with static build),
|
||||
# a consumer app don't have access to the variables set by an OCIO's CMake files. Therefore, some
|
||||
# OCIO's find modules must detect the build type by itselves.
|
||||
set(BUILD_TYPE_DEBUG OFF)
|
||||
if(CMAKE_BUILD_TYPE MATCHES "[Dd][Ee][Bb][Uu][Gg]")
|
||||
set(BUILD_TYPE_DEBUG ON)
|
||||
endif()
|
||||
|
||||
if(NOT OCIO_INSTALL_EXT_PACKAGES STREQUAL ALL)
|
||||
if(NOT DEFINED minizip-ng_ROOT)
|
||||
# Search for minizip-ng-config.cmake
|
||||
find_package(minizip-ng ${minizip-ng_FIND_VERSION} CONFIG)
|
||||
find_package(minizip-ng ${minizip-ng_FIND_VERSION} CONFIG QUIET)
|
||||
endif()
|
||||
|
||||
if (minizip-ng_FOUND)
|
||||
get_target_property(minizip-ng_LIBRARY MINIZIP::minizip-ng LOCATION)
|
||||
get_target_property(minizip-ng_INCLUDE_DIR MINIZIP::minizip-ng INTERFACE_INCLUDE_DIRECTORIES)
|
||||
else ()
|
||||
get_target_property(minizip-ng_LIBRARY MINIZIP::minizip-ng LOCATION)
|
||||
|
||||
# Depending on the options used when minizip-ng was built, it could have multiple libraries
|
||||
# listed in INTERFACE_LINK_LIBRARIES. OCIO only needs ZLIB.
|
||||
# Only add custom zlib target ZLIB::ZLIB to INTERFACE_LINK_LIBRARIES.
|
||||
set_target_properties(MINIZIP::minizip-ng PROPERTIES INTERFACE_LINK_LIBRARIES "ZLIB::ZLIB")
|
||||
|
||||
if (NOT minizip-ng_LIBRARY)
|
||||
# Lib names to search for
|
||||
set(_minizip-ng_LIB_NAMES minizip-ng)
|
||||
|
||||
if(BUILD_TYPE_DEBUG)
|
||||
# Prefer Debug lib names (Windows only)
|
||||
list(INSERT _minizip-ng_LIB_NAMES 0 minizip-ngd)
|
||||
endif()
|
||||
|
||||
if(minizip-ng_STATIC_LIBRARY)
|
||||
# Prefer static lib names
|
||||
set(_minizip-ng_STATIC_LIB_NAMES
|
||||
"${CMAKE_STATIC_LIBRARY_PREFIX}minizip-ng${CMAKE_STATIC_LIBRARY_SUFFIX}")
|
||||
if(WIN32 AND BUILD_TYPE_DEBUG)
|
||||
# Prefer static Debug lib names (Windows only)
|
||||
list(INSERT _minizip-ng_STATIC_LIB_NAMES 0
|
||||
"${CMAKE_STATIC_LIBRARY_PREFIX}minizip-ngd${CMAKE_STATIC_LIBRARY_SUFFIX}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Find library
|
||||
find_library(minizip-ng_LIBRARY
|
||||
NAMES
|
||||
${_minizip-ng_STATIC_LIB_NAMES}
|
||||
${_minizip-ng_LIB_NAMES}
|
||||
HINTS
|
||||
${minizip-ng_ROOT}
|
||||
${PC_minizip-ng_LIBRARY_DIRS}
|
||||
PATH_SUFFIXES
|
||||
lib64 lib
|
||||
)
|
||||
|
||||
# Set IMPORTED_LOCATION property for MINIZIP::minizip-ng target.
|
||||
if (TARGET MINIZIP::minizip-ng)
|
||||
set_target_properties(MINIZIP::minizip-ng PROPERTIES
|
||||
IMPORTED_LOCATION "${minizip-ng_LIBRARY}"
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
else()
|
||||
list(APPEND _minizip-ng_REQUIRED_VARS minizip-ng_INCLUDE_DIR)
|
||||
|
||||
# Search for minizip-ng.pc
|
||||
@@ -40,25 +105,26 @@ if(NOT OCIO_INSTALL_EXT_PACKAGES STREQUAL ALL)
|
||||
${PC_minizip-ng_INCLUDE_DIRS}
|
||||
PATH_SUFFIXES
|
||||
include
|
||||
include/minizip-ng
|
||||
minizip-ng/include
|
||||
)
|
||||
|
||||
# Lib names to search for
|
||||
set(_minizip-ng_LIB_NAMES minizip-ng libminizip-ng)
|
||||
if(BUILD_TYPE_DEBUG)
|
||||
# Prefer Debug lib names (Windows only)
|
||||
list(INSERT _minizip-ng_LIB_NAMES 0 minizip-ngd)
|
||||
endif()
|
||||
# Minizip-ng uses prefix "lib" on all platform by default.
|
||||
# Library name doesn't change in debug.
|
||||
|
||||
# Lib names to search for.
|
||||
# Search for "minizip" since the library could be named "minizip" if it was built
|
||||
# with MZ_COMPAT=ON.
|
||||
set(_minizip-ng_LIB_NAMES libminizip-ng minizip-ng libminizip minizip)
|
||||
|
||||
if(minizip-ng_STATIC_LIBRARY)
|
||||
# Prefer static lib names
|
||||
# Looking for both "lib" prefix and CMAKE_STATIC_LIBRARY_PREFIX.
|
||||
# Prefer static lib names.
|
||||
set(_minizip-ng_STATIC_LIB_NAMES
|
||||
"${CMAKE_STATIC_LIBRARY_PREFIX}minizip-ng${CMAKE_STATIC_LIBRARY_SUFFIX}")
|
||||
if(WIN32 AND BUILD_TYPE_DEBUG)
|
||||
# Prefer static Debug lib names (Windows only)
|
||||
list(INSERT _minizip-ng_STATIC_LIB_NAMES 0
|
||||
"${CMAKE_STATIC_LIBRARY_PREFIX}minizip-ngd${CMAKE_STATIC_LIBRARY_SUFFIX}")
|
||||
endif()
|
||||
"libminizip-ng${CMAKE_STATIC_LIBRARY_SUFFIX}"
|
||||
"${CMAKE_STATIC_LIBRARY_PREFIX}minizip-ng${CMAKE_STATIC_LIBRARY_SUFFIX}"
|
||||
"libminizip${CMAKE_STATIC_LIBRARY_SUFFIX}"
|
||||
"${CMAKE_STATIC_LIBRARY_PREFIX}minizip${CMAKE_STATIC_LIBRARY_SUFFIX}")
|
||||
endif()
|
||||
|
||||
# Find library
|
||||
@@ -74,7 +140,23 @@ if(NOT OCIO_INSTALL_EXT_PACKAGES STREQUAL ALL)
|
||||
)
|
||||
|
||||
# Get version from header or pkg-config
|
||||
set(minizip-ng_VERSION "${minizip-ng_FIND_VERSION}")
|
||||
if(minizip-ng_INCLUDE_DIR)
|
||||
list(GET minizip-ng_INCLUDE_DIR 0 _minizip-ng_INCLUDE_DIR)
|
||||
if(EXISTS "${_minizip-ng_INCLUDE_DIR}/mz.h")
|
||||
set(_minizip-ng_CONFIG "${_minizip-ng_INCLUDE_DIR}/mz.h")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(_minizip-ng_CONFIG)
|
||||
file(STRINGS "${_minizip-ng_CONFIG}" _minizip-ng_VER_SEARCH
|
||||
REGEX "^[ \t]*#define[ \t]+MZ_VERSION[ \t]+\\(\"[.0-9]+\"\\).*$")
|
||||
if(_minizip-ng_VER_SEARCH)
|
||||
string(REGEX REPLACE ".*#define[ \t]+MZ_VERSION[ \t]+\\(\"([.0-9]+)\"\\).*"
|
||||
"\\1" minizip-ng_VERSION "${_minizip-ng_VER_SEARCH}")
|
||||
endif()
|
||||
elseif(PC_minizip-ng_FOUND)
|
||||
set(minizip-ng_VERSION "${PC_minizip-ng_VERSION}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Override REQUIRED if package can be installed
|
||||
@@ -94,15 +176,15 @@ endif()
|
||||
|
||||
###############################################################################
|
||||
### Create target
|
||||
|
||||
if(NOT TARGET minizip-ng::minizip-ng)
|
||||
add_library(minizip-ng::minizip-ng UNKNOWN IMPORTED GLOBAL)
|
||||
if(NOT TARGET MINIZIP::minizip-ng)
|
||||
add_library(MINIZIP::minizip-ng UNKNOWN IMPORTED GLOBAL)
|
||||
set(_minizip-ng_TARGET_CREATE TRUE)
|
||||
endif()
|
||||
|
||||
###############################################################################
|
||||
### Install package from source ###
|
||||
if(NOT minizip-ng_FOUND AND NOT OCIO_INSTALL_EXT_PACKAGES STREQUAL NONE)
|
||||
|
||||
if(NOT minizip-ng_FOUND AND OCIO_INSTALL_EXT_PACKAGES AND NOT OCIO_INSTALL_EXT_PACKAGES STREQUAL NONE)
|
||||
include(ExternalProject)
|
||||
include(GNUInstallDirs)
|
||||
|
||||
@@ -112,7 +194,8 @@ if(NOT minizip-ng_FOUND AND NOT OCIO_INSTALL_EXT_PACKAGES STREQUAL NONE)
|
||||
# Set find_package standard args
|
||||
set(minizip-ng_FOUND TRUE)
|
||||
set(minizip-ng_VERSION ${minizip-ng_FIND_VERSION})
|
||||
set(minizip-ng_INCLUDE_DIR "${_EXT_DIST_ROOT}/${CMAKE_INSTALL_INCLUDEDIR}")
|
||||
|
||||
set(minizip-ng_INCLUDE_DIR "${_EXT_DIST_ROOT}/${CMAKE_INSTALL_INCLUDEDIR}/minizip-ng")
|
||||
|
||||
# Minizip-ng use a hardcoded lib prefix instead of CMAKE_STATIC_LIBRARY_PREFIX
|
||||
set(_minizip-ng_LIB_PREFIX "lib")
|
||||
@@ -121,8 +204,8 @@ if(NOT minizip-ng_FOUND AND NOT OCIO_INSTALL_EXT_PACKAGES STREQUAL NONE)
|
||||
"${_EXT_DIST_ROOT}/${CMAKE_INSTALL_LIBDIR}/${_minizip-ng_LIB_PREFIX}minizip-ng${_minizip-ng_LIB_SUFFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}")
|
||||
|
||||
if(_minizip-ng_TARGET_CREATE)
|
||||
set(MINIZIP-NG_CMAKE_ARGS
|
||||
${MINIZIP-NG_CMAKE_ARGS}
|
||||
set(minizip-ng_CMAKE_ARGS
|
||||
${minizip-ng_CMAKE_ARGS}
|
||||
-DCMAKE_CXX_VISIBILITY_PRESET=${CMAKE_CXX_VISIBILITY_PRESET}
|
||||
-DCMAKE_VISIBILITY_INLINES_HIDDEN=${CMAKE_VISIBILITY_INLINES_HIDDEN}
|
||||
-DCMAKE_POSITION_INDEPENDENT_CODE=ON
|
||||
@@ -133,6 +216,10 @@ if(NOT minizip-ng_FOUND AND NOT OCIO_INSTALL_EXT_PACKAGES STREQUAL NONE)
|
||||
-DCMAKE_INSTALL_BINDIR=${CMAKE_INSTALL_BINDIR}
|
||||
-DCMAKE_INSTALL_DATADIR=${CMAKE_INSTALL_DATADIR}
|
||||
-DCMAKE_INSTALL_LIBDIR=${CMAKE_INSTALL_LIBDIR}
|
||||
# Since the other modules create a subfolder for the includes by default and since
|
||||
# minizip-ng does not, a suffix is added to CMAKE_INSTALL_INCLUDEDIR in order to
|
||||
# install the headers under a subdirectory named "minizip-ng".
|
||||
# Note that this does not affect external builds for minizip-ng.
|
||||
-DCMAKE_INSTALL_INCLUDEDIR=${CMAKE_INSTALL_INCLUDEDIR}/minizip-ng
|
||||
-DCMAKE_OBJECT_PATH_MAX=${CMAKE_OBJECT_PATH_MAX}
|
||||
-DBUILD_SHARED_LIBS=OFF
|
||||
@@ -189,17 +276,17 @@ if(NOT minizip-ng_FOUND AND NOT OCIO_INSTALL_EXT_PACKAGES STREQUAL NONE)
|
||||
GIT_SHALLOW TRUE
|
||||
PREFIX "${_EXT_BUILD_ROOT}/libminizip-ng"
|
||||
BUILD_BYPRODUCTS ${minizip-ng_LIBRARY}
|
||||
CMAKE_ARGS ${MINIZIP-NG_CMAKE_ARGS}
|
||||
CMAKE_ARGS ${minizip-ng_CMAKE_ARGS}
|
||||
EXCLUDE_FROM_ALL TRUE
|
||||
BUILD_COMMAND ""
|
||||
INSTALL_COMMAND
|
||||
${CMAKE_COMMAND} --build .
|
||||
--config ${CMAKE_BUILD_TYPE}
|
||||
--target install
|
||||
--parallel
|
||||
--config ${CMAKE_BUILD_TYPE}
|
||||
--target install
|
||||
--parallel
|
||||
)
|
||||
|
||||
add_dependencies(minizip-ng::minizip-ng minizip-ng_install)
|
||||
add_dependencies(MINIZIP::minizip-ng minizip-ng_install)
|
||||
message(STATUS "Installing minizip-ng: ${minizip-ng_LIBRARY} (version \"${minizip-ng_VERSION}\")")
|
||||
endif()
|
||||
|
||||
@@ -207,12 +294,12 @@ endif()
|
||||
### Configure target ###
|
||||
|
||||
if(_minizip-ng_TARGET_CREATE)
|
||||
set_target_properties(minizip-ng::minizip-ng PROPERTIES
|
||||
set_target_properties(MINIZIP::minizip-ng PROPERTIES
|
||||
IMPORTED_LOCATION "${minizip-ng_LIBRARY}"
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${minizip-ng_INCLUDE_DIR}"
|
||||
)
|
||||
|
||||
mark_as_advanced(minizip-ng_INCLUDE_DIR minizip-ng_LIBRARY minizip-ng_VERSION)
|
||||
|
||||
target_link_libraries(minizip-ng::minizip-ng INTERFACE ZLIB::ZLIB)
|
||||
target_link_libraries(MINIZIP::minizip-ng INTERFACE ZLIB::ZLIB)
|
||||
endif()
|
||||
@@ -58,7 +58,7 @@ endif()
|
||||
###############################################################################
|
||||
### Install package from source ###
|
||||
|
||||
if(NOT openfx_FOUND AND NOT OCIO_INSTALL_EXT_PACKAGES STREQUAL NONE)
|
||||
if(NOT openfx_FOUND AND OCIO_INSTALL_EXT_PACKAGES AND NOT OCIO_INSTALL_EXT_PACKAGES STREQUAL NONE)
|
||||
include(ExternalProject)
|
||||
include(GNUInstallDirs)
|
||||
|
||||
|
||||
@@ -134,7 +134,7 @@ endif()
|
||||
###############################################################################
|
||||
### Install package from source ###
|
||||
|
||||
if(NOT pybind11_FOUND AND NOT OCIO_INSTALL_EXT_PACKAGES STREQUAL NONE)
|
||||
if(NOT pybind11_FOUND AND OCIO_INSTALL_EXT_PACKAGES AND NOT OCIO_INSTALL_EXT_PACKAGES STREQUAL NONE)
|
||||
include(ExternalProject)
|
||||
include(GNUInstallDirs)
|
||||
|
||||
|
||||
@@ -66,7 +66,7 @@ endif()
|
||||
###############################################################################
|
||||
### Install package from source ###
|
||||
|
||||
if(NOT pystring_FOUND AND NOT OCIO_INSTALL_EXT_PACKAGES STREQUAL NONE)
|
||||
if(NOT pystring_FOUND AND OCIO_INSTALL_EXT_PACKAGES AND NOT OCIO_INSTALL_EXT_PACKAGES STREQUAL NONE)
|
||||
include(ExternalProject)
|
||||
|
||||
set(_EXT_DIST_ROOT "${CMAKE_BINARY_DIR}/ext/dist")
|
||||
@@ -127,14 +127,6 @@ if(NOT pystring_FOUND AND NOT OCIO_INSTALL_EXT_PACKAGES STREQUAL NONE)
|
||||
-DANDROID_STL=${ANDROID_STL})
|
||||
endif()
|
||||
|
||||
if(NOT BUILD_SHARED_LIBS)
|
||||
#TODO: Find a way to merge in the static libs when built with internal pystring
|
||||
message(WARNING
|
||||
"Building STATIC libOpenColorIO using the in-built pystring. "
|
||||
"pystring symbols are NOT included in the output binary!"
|
||||
)
|
||||
endif()
|
||||
|
||||
# Hack to let imported target be built from ExternalProject_Add
|
||||
file(MAKE_DIRECTORY ${pystring_INCLUDE_DIR})
|
||||
|
||||
|
||||
@@ -25,6 +25,15 @@
|
||||
###############################################################################
|
||||
### Try to find package ###
|
||||
|
||||
# BUILD_TYPE_DEBUG variable is currently set in one of the OCIO's CMake files.
|
||||
# Now that some OCIO's find module are installed with the library itself (with static build),
|
||||
# a consumer app don't have access to the variables set by an OCIO's CMake files. Therefore, some
|
||||
# OCIO's find modules must detect the build type by itselves.
|
||||
set(BUILD_TYPE_DEBUG OFF)
|
||||
if(CMAKE_BUILD_TYPE MATCHES "[Dd][Ee][Bb][Uu][Gg]")
|
||||
set(BUILD_TYPE_DEBUG ON)
|
||||
endif()
|
||||
|
||||
if(NOT OCIO_INSTALL_EXT_PACKAGES STREQUAL ALL)
|
||||
set(_yaml-cpp_REQUIRED_VARS yaml-cpp_LIBRARY)
|
||||
|
||||
@@ -66,22 +75,21 @@ if(NOT OCIO_INSTALL_EXT_PACKAGES STREQUAL ALL)
|
||||
|
||||
# Lib names to search for
|
||||
set(_yaml-cpp_LIB_NAMES yaml-cpp)
|
||||
if(WIN32 AND BUILD_TYPE_DEBUG AND NOT MINGW)
|
||||
# Prefer Debug lib names (Windows only)
|
||||
if(BUILD_TYPE_DEBUG)
|
||||
# Prefer Debug lib names.
|
||||
list(INSERT _yaml-cpp_LIB_NAMES 0 yaml-cppd)
|
||||
endif()
|
||||
|
||||
if(yaml-cpp_STATIC_LIBRARY)
|
||||
# Prefer static lib names
|
||||
if(WIN32 AND NOT MINGW)
|
||||
set(_yaml-cpp_LIB_SUFFIX "md")
|
||||
endif()
|
||||
set(_yaml-cpp_STATIC_LIB_NAMES
|
||||
"libyaml-cpp${_yaml-cpp_LIB_SUFFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}")
|
||||
if(WIN32 AND BUILD_TYPE_DEBUG AND NOT MINGW)
|
||||
# Prefer static Debug lib names (Windows only)
|
||||
"${CMAKE_STATIC_LIBRARY_PREFIX}yaml-cpp${CMAKE_STATIC_LIBRARY_SUFFIX}")
|
||||
|
||||
# Starting from 0.7.0, all platforms uses the suffix "d" for debug.
|
||||
# See https://github.com/jbeder/yaml-cpp/blob/master/CMakeLists.txt#L141
|
||||
if(BUILD_TYPE_DEBUG)
|
||||
list(INSERT _yaml-cpp_STATIC_LIB_NAMES 0
|
||||
"libyaml-cpp${_yaml-cpp_LIB_SUFFIX}d${CMAKE_STATIC_LIBRARY_SUFFIX}")
|
||||
"${CMAKE_STATIC_LIBRARY_PREFIX}yaml-cppd${CMAKE_STATIC_LIBRARY_SUFFIX}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
@@ -91,7 +99,7 @@ if(NOT OCIO_INSTALL_EXT_PACKAGES STREQUAL ALL)
|
||||
${_yaml-cpp_STATIC_LIB_NAMES}
|
||||
${_yaml-cpp_LIB_NAMES}
|
||||
HINTS
|
||||
${_yaml-cpp_ROOT}
|
||||
${yaml-cpp_ROOT}
|
||||
${PC_yaml-cpp_LIBRARY_DIRS}
|
||||
PATH_SUFFIXES
|
||||
lib64
|
||||
@@ -130,7 +138,7 @@ endif()
|
||||
###############################################################################
|
||||
### Install package from source ###
|
||||
|
||||
if(NOT yaml-cpp_FOUND AND NOT OCIO_INSTALL_EXT_PACKAGES STREQUAL NONE)
|
||||
if(NOT yaml-cpp_FOUND AND OCIO_INSTALL_EXT_PACKAGES AND NOT OCIO_INSTALL_EXT_PACKAGES STREQUAL NONE)
|
||||
include(ExternalProject)
|
||||
include(GNUInstallDirs)
|
||||
|
||||
@@ -213,14 +221,6 @@ if(NOT yaml-cpp_FOUND AND NOT OCIO_INSTALL_EXT_PACKAGES STREQUAL NONE)
|
||||
-DANDROID_STL=${ANDROID_STL})
|
||||
endif()
|
||||
|
||||
if(NOT BUILD_SHARED_LIBS)
|
||||
#TODO: Find a way to merge in the static libs when built with internal yamlcpp
|
||||
message(WARNING
|
||||
"Building STATIC libOpenColorIO using the in-built yaml-cpp. "
|
||||
"yaml-cpp symbols are NOT included in the output binary!"
|
||||
)
|
||||
endif()
|
||||
|
||||
set(yaml-cpp_GIT_TAG "yaml-cpp-${yaml-cpp_VERSION}")
|
||||
|
||||
# Hack to let imported target be built from ExternalProject_Add
|
||||
|
||||
@@ -1,75 +1,58 @@
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# Copyright Contributors to the OpenColorIO Project.
|
||||
#
|
||||
# Locate or install minizip-ng
|
||||
# Install ZLIB
|
||||
#
|
||||
# Except for the variable ZLIB_VERSION_STRING, OCIO sets the same variables as the
|
||||
# CMake's FindZLIB when installing ZLIB manually.
|
||||
#
|
||||
# Variables defined by this module:
|
||||
# ZLIB_FOUND - If FALSE, do not try to link to minizip-ng
|
||||
# ZLIB_FOUND - If FALSE, do not try to link to zlib
|
||||
# ZLIB_LIBRARIES - ZLIB library to link to
|
||||
# ZLIB_INCLUDE_DIRS - Where to find zlib.h and other headers
|
||||
# ZLIB_VERSION - The version of the library
|
||||
#
|
||||
# Targets defined by this module:
|
||||
# ZLIB::ZLIB - IMPORTED target, if found
|
||||
#
|
||||
# This module is named GetZLIB because it is not used with find_package().
|
||||
# It must be included using include().
|
||||
#
|
||||
# The reason is that CMake provide a FindZLIB already and the current file is
|
||||
# using it.
|
||||
# ZLIB::ZLIB - Properties:
|
||||
# IMPORTED_LOCATION ${ZLIB_LIBRARIES}
|
||||
# INTERFACE_INCLUDE_DIRECTORIES ${ZLIB_INCLUDE_DIRS}
|
||||
#
|
||||
###############################################################################
|
||||
### Try to find package ###
|
||||
|
||||
# Assign the rigtt name for ZLIB depending on the OS.
|
||||
if(WIN32)
|
||||
set(_ZLIB_LIB_NAME "zlib")
|
||||
set(_ZLIB_STATIC_LIB_NAME "zlibstatic")
|
||||
else()
|
||||
set(_ZLIB_LIB_NAME "z")
|
||||
set(_ZLIB_STATIC_LIB_NAME "z")
|
||||
endif()
|
||||
|
||||
if(NOT OCIO_INSTALL_EXT_PACKAGES STREQUAL ALL)
|
||||
set(_ZLIB_REQUIRED_VARS ZLIB_LIBRARIES)
|
||||
|
||||
if(NOT DEFINED ZLIB_ROOT)
|
||||
# Save old value of CMAKE_MODULE_PATH
|
||||
set(_ZLIB__CMAKE_MODULE_PATH_OLD_ ${CMAKE_MODULE_PATH})
|
||||
# Force find_package to use CMAKE module and not custom modules.
|
||||
set(CMAKE_MODULE_PATH "${CMAKE_ROOT}/Modules")
|
||||
|
||||
# Use CMake FindZLIB module
|
||||
find_package(ZLIB ${zlib_FIND_VERSION})
|
||||
|
||||
# Restore CMAKE_MODULE_PATH
|
||||
set(CMAKE_MODULE_PATH ${_ZLIB__CMAKE_MODULE_PATH_OLD_})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
###############################################################################
|
||||
### Create target
|
||||
|
||||
###############################################################################
|
||||
if(NOT TARGET ZLIB::ZLIB)
|
||||
add_library(ZLIB::ZLIB UNKNOWN IMPORTED GLOBAL)
|
||||
set(_ZLIB_TARGET_CREATE TRUE)
|
||||
endif()
|
||||
|
||||
###############################################################################
|
||||
### Install package from source ###
|
||||
if(NOT ZLIB_FOUND AND NOT OCIO_INSTALL_EXT_PACKAGES STREQUAL NONE)
|
||||
### Install package from source
|
||||
###############################################################################
|
||||
if(NOT ZLIB_FOUND AND OCIO_INSTALL_EXT_PACKAGES AND NOT OCIO_INSTALL_EXT_PACKAGES STREQUAL NONE)
|
||||
include(ExternalProject)
|
||||
include(GNUInstallDirs)
|
||||
|
||||
set(_EXT_DIST_ROOT "${CMAKE_BINARY_DIR}/ext/dist")
|
||||
set(_EXT_BUILD_ROOT "${CMAKE_BINARY_DIR}/ext/build")
|
||||
|
||||
if(WIN32)
|
||||
set(_ZLIB_LIB_NAME "zlib")
|
||||
set(_ZLIB_STATIC_LIB_NAME "zlibstatic")
|
||||
else()
|
||||
set(_ZLIB_LIB_NAME "z")
|
||||
set(_ZLIB_STATIC_LIB_NAME "z")
|
||||
endif()
|
||||
|
||||
# Set find_package standard args
|
||||
set(ZLIB_FOUND TRUE)
|
||||
if(_zlib_ExternalProject_VERSION)
|
||||
set(ZLIB_VERSION ${_zlib_ExternalProject_VERSION})
|
||||
if(_ZLIB_ExternalProject_VERSION)
|
||||
set(ZLIB_VERSION ${_ZLIB_ExternalProject_VERSION})
|
||||
else()
|
||||
set(ZLIB_VERSION ${zlib_FIND_VERSION})
|
||||
set(ZLIB_VERSION ${ZLIB_FIND_VERSION})
|
||||
endif()
|
||||
|
||||
set(ZLIB_INCLUDE_DIRS "${_EXT_DIST_ROOT}/${CMAKE_INSTALL_INCLUDEDIR}")
|
||||
|
||||
# Windows need the "d" suffix at the end.
|
||||
@@ -149,22 +132,19 @@ if(NOT ZLIB_FOUND AND NOT OCIO_INSTALL_EXT_PACKAGES STREQUAL NONE)
|
||||
COMMAND ${CMAKE_COMMAND} -E remove -f ${_EXT_DIST_ROOT}/${_ZLIB_INSTALL_LIBDIR}/zlib.lib ${_EXT_DIST_ROOT}/bin/zlib.dll
|
||||
)
|
||||
|
||||
add_library(ZLIB::ZLIB STATIC IMPORTED GLOBAL)
|
||||
add_dependencies(ZLIB::ZLIB ZLIB_install)
|
||||
set_property(TARGET ZLIB::ZLIB PROPERTY
|
||||
IMPORTED_LOCATION "${ZLIB_LIBRARIES}"
|
||||
)
|
||||
target_include_directories(ZLIB::ZLIB INTERFACE "${CMAKE_INSTALL_BINDIR}/include")
|
||||
|
||||
|
||||
# Setting those variables to follow the same naming as the other OCIO custom find modules.
|
||||
set(ZLIB_LIBRARY ${ZLIB_LIBRARIES})
|
||||
set(ZLIB_INCLUDE_DIR ${ZLIB_INCLUDE_DIRS})
|
||||
|
||||
message(STATUS "Installing ZLIB: ${ZLIB_LIBRARIES} (version \"${ZLIB_VERSION}\")")
|
||||
endif()
|
||||
|
||||
|
||||
###############################################################################
|
||||
### Configure target ###
|
||||
|
||||
###############################################################################
|
||||
if(_ZLIB_TARGET_CREATE)
|
||||
set_target_properties(ZLIB::ZLIB PROPERTIES
|
||||
IMPORTED_LOCATION ${ZLIB_LIBRARIES}
|
||||
@@ -3,6 +3,8 @@
|
||||
|
||||
include(CheckCXXSourceCompiles)
|
||||
|
||||
set(_cmake_required_flags_old "${CMAKE_REQUIRED_FLAGS}")
|
||||
|
||||
if(NOT CMAKE_SIZE_OF_VOID_P EQUAL 8)
|
||||
# As CheckCXXCompilerFlag implicitly uses CMAKE_CXX_FLAGS some custom flags could trigger
|
||||
# unrelated warnings causing a detection failure. So, the code disables all warnings to focus
|
||||
@@ -27,4 +29,7 @@ check_cxx_source_compiles ("
|
||||
}"
|
||||
HAVE_SSE2)
|
||||
|
||||
set(CMAKE_REQUIRED_FLAGS "${_cmake_required_flags_old}")
|
||||
unset(_cmake_required_flags_old)
|
||||
|
||||
mark_as_advanced(HAVE_SSE2)
|
||||
|
||||
@@ -193,6 +193,7 @@ IF NOT EXIST "!PYTHON_PATH!" (
|
||||
if !DO_CONFIGURE!==1 (
|
||||
echo Running CMake...
|
||||
cmake -B "!BUILD_PATH!"^
|
||||
-DCMAKE_INSTALL_PREFIX=!INSTALL_PATH!^
|
||||
-DOCIO_INSTALL_EXT_PACKAGES=ALL^
|
||||
-DCMAKE_BUILD_TYPE=!CMAKE_BUILD_TYPE!^
|
||||
-DGLEW_ROOT="!GLEW_ROOT!"^
|
||||
@@ -231,7 +232,7 @@ if Not "%CMAKE_CONFIGURE_STATUS%"=="Failed" (
|
||||
rem Run cmake --install only if cmake --build was successful.
|
||||
if Not "%CMAKE_BUILD_STATUS%"=="Failed" (
|
||||
rem Install OCIO
|
||||
cmake --install !BUILD_PATH! --config !CMAKE_BUILD_TYPE! --prefix !INSTALL_PATH!
|
||||
cmake --install !BUILD_PATH! --config !CMAKE_BUILD_TYPE!
|
||||
if not ErrorLevel 1 (
|
||||
set CMAKE_INSTALL_STATUS=Ok
|
||||
) else (
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# Copyright Contributors to the OpenColorIO Project.
|
||||
#
|
||||
# This script will print the information OCIO has for each active monitor/display
|
||||
# connected to the system. The information consists of a Monitor Name and a path
|
||||
# to the monitor's ICC profile.
|
||||
#
|
||||
# OCIO attempts to build the unique Monitor Name based on information available
|
||||
# from the operating system, but sometimes that information may not be that helpful.
|
||||
# Ideally the Monitor Names should be descriptive enough to allow a user to determine
|
||||
# which name corresponds to which physical display and yet brief enough that they are
|
||||
# able to be used in menus that list the available displays.
|
||||
#
|
||||
# This script is an easy way to check the information OCIO detects on a given system
|
||||
# and may be useful when submitting bug reports.
|
||||
#
|
||||
import PyOpenColorIO as OCIO
|
||||
|
||||
for m in OCIO.SystemMonitors().getMonitors():
|
||||
# Each element is a tuple containing the monitor display name and the ICC profile path.
|
||||
print(m)
|
||||
@@ -174,18 +174,30 @@ set(SOURCES
|
||||
SystemMonitor.cpp
|
||||
)
|
||||
|
||||
if(NOT WIN32)
|
||||
# Install the pkg-config file.
|
||||
|
||||
# Install the pkg-config file.
|
||||
set(prefix ${CMAKE_INSTALL_PREFIX})
|
||||
set(exec_prefix "\${prefix}")
|
||||
|
||||
set(prefix ${CMAKE_INSTALL_PREFIX})
|
||||
set(exec_prefix "\${prefix}")
|
||||
# CMAKE_INSTALL_LIBDIR is not guaranteed to be relative.
|
||||
# Not using cmake_path function since it is only available from CMake ≥ 3.20.
|
||||
if(IS_ABSOLUTE "${CMAKE_INSTALL_LIBDIR}")
|
||||
set(libdir "${CMAKE_INSTALL_LIBDIR}")
|
||||
else()
|
||||
set(libdir "\${exec_prefix}/${CMAKE_INSTALL_LIBDIR}")
|
||||
set(includedir "\${exec_prefix}/${CMAKE_INSTALL_INCLUDEDIR}")
|
||||
configure_file(res/OpenColorIO.pc.in ${CMAKE_CURRENT_BINARY_DIR}/OpenColorIO.pc @ONLY)
|
||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/OpenColorIO.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
|
||||
endif()
|
||||
|
||||
# CMAKE_INSTALL_INCLUDEDIR is not guaranteed to be relative.
|
||||
# Not using cmake_path function since it is only available from CMake ≥ 3.20.
|
||||
if(IS_ABSOLUTE "${CMAKE_INSTALL_INCLUDEDIR}")
|
||||
set(includedir "${CMAKE_INSTALL_INCLUDEDIR}")
|
||||
else()
|
||||
set(includedir "\${prefix}/${CMAKE_INSTALL_INCLUDEDIR}")
|
||||
endif()
|
||||
|
||||
configure_file(res/OpenColorIO.pc.in ${CMAKE_CURRENT_BINARY_DIR}/OpenColorIO.pc @ONLY)
|
||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/OpenColorIO.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
|
||||
|
||||
add_library(OpenColorIO ${SOURCES})
|
||||
|
||||
# Require at least a C++11 compatible compiler for consumer projects.
|
||||
@@ -277,7 +289,7 @@ target_link_libraries(OpenColorIO
|
||||
"$<BUILD_INTERFACE:utils::strings>"
|
||||
"$<BUILD_INTERFACE:xxHash>"
|
||||
yaml-cpp
|
||||
minizip-ng::minizip-ng
|
||||
MINIZIP::minizip-ng
|
||||
)
|
||||
|
||||
if(APPLE)
|
||||
@@ -356,9 +368,36 @@ if(UNIX AND NOT APPLE)
|
||||
set_property (TARGET OpenColorIO
|
||||
APPEND PROPERTY LINK_FLAGS "-Wl,--exclude-libs,ALL")
|
||||
elseif(APPLE)
|
||||
# Hide the expat symbols.
|
||||
set_property (TARGET OpenColorIO
|
||||
APPEND PROPERTY LINK_FLAGS "-Wl,-hidden-lexpat")
|
||||
if (expat_LIBRARY)
|
||||
get_filename_component(_expat_LIBDIR "${expat_LIBRARY}" DIRECTORY)
|
||||
# Add the path to CMake list of search paths for libraries.
|
||||
list(APPEND _OCIO_LINK_FLAGS_LIST_ "-Wl,-L${_expat_LIBDIR}")
|
||||
# Hide the expat symbols.
|
||||
list(APPEND _OCIO_LINK_FLAGS_LIST_ "-Wl,-hidden-lexpat")
|
||||
endif()
|
||||
|
||||
|
||||
# Check for minizip first since our Findminizip module sets minizip-ng_LIBRARY.
|
||||
if (minizip_LIBRARY)
|
||||
get_filename_component(_minizip-ng_LIBDIR "${minizip_LIBRARY}" DIRECTORY)
|
||||
set(_minizip-ng_NAME "minizip")
|
||||
elseif(minizip-ng_LIBRARY)
|
||||
get_filename_component(_minizip-ng_LIBDIR "${minizip-ng_LIBRARY}" DIRECTORY)
|
||||
set(_minizip-ng_NAME "minizip-ng")
|
||||
endif()
|
||||
|
||||
if (_minizip-ng_LIBDIR)
|
||||
# Add the path to CMake list of search paths for libraries.
|
||||
list(APPEND _OCIO_LINK_FLAGS_LIST_ "-Wl,-L${_minizip-ng_LIBDIR}")
|
||||
# Hide the minizip-ng symbols.
|
||||
list(APPEND _OCIO_LINK_FLAGS_LIST_ "-Wl,-hidden-l${_minizip-ng_NAME}")
|
||||
endif()
|
||||
|
||||
if (_OCIO_LINK_FLAGS_LIST_)
|
||||
list(JOIN _OCIO_LINK_FLAGS_LIST_ " " _OCIO_LINK_FLAGS_LIST_)
|
||||
set_property (TARGET OpenColorIO
|
||||
APPEND PROPERTY LINK_FLAGS "${_OCIO_LINK_FLAGS_LIST_}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(MSVC AND BUILD_SHARED_LIBS)
|
||||
|
||||
@@ -3127,6 +3127,13 @@ bool Config::isColorSpaceLinear(const char * colorSpace, ReferenceSpaceType refe
|
||||
{
|
||||
auto cs = getColorSpace(colorSpace);
|
||||
|
||||
if (cs == nullptr)
|
||||
{
|
||||
std::ostringstream os;
|
||||
os << "Could not test colorspace linearity. Colorspace " << colorSpace << " does not exist.";
|
||||
throw Exception(os.str().c_str());
|
||||
}
|
||||
|
||||
if (cs->isData())
|
||||
{
|
||||
return false;
|
||||
|
||||
@@ -143,11 +143,15 @@ std::string getTexSample(GpuLanguage lang,
|
||||
switch (lang)
|
||||
{
|
||||
case GPU_LANGUAGE_GLSL_1_2:
|
||||
case GPU_LANGUAGE_GLSL_1_3:
|
||||
{
|
||||
kw << "texture" << N << "D(" << samplerName << ", " << coords << ")";
|
||||
break;
|
||||
}
|
||||
case GPU_LANGUAGE_GLSL_1_3:
|
||||
{
|
||||
kw << "texture(" << samplerName << ", " << coords << ")";
|
||||
break;
|
||||
}
|
||||
case GPU_LANGUAGE_GLSL_ES_1_0:
|
||||
{
|
||||
if (N == 1) {
|
||||
|
||||
@@ -17,16 +17,16 @@
|
||||
|
||||
#include "OCIOZArchive.h"
|
||||
|
||||
#include "minizip-ng/mz.h"
|
||||
#include "minizip-ng/mz_os.h"
|
||||
#include "minizip-ng/mz_strm.h"
|
||||
#include "minizip-ng/mz_strm_buf.h"
|
||||
#include "minizip-ng/mz_strm_mem.h"
|
||||
#include "minizip-ng/mz_strm_os.h"
|
||||
#include "minizip-ng/mz_strm_split.h"
|
||||
#include "minizip-ng/mz_strm_zlib.h"
|
||||
#include "minizip-ng/mz_zip.h"
|
||||
#include "minizip-ng/mz_zip_rw.h"
|
||||
#include "mz.h"
|
||||
#include "mz_os.h"
|
||||
#include "mz_strm.h"
|
||||
#include "mz_strm_buf.h"
|
||||
#include "mz_strm_mem.h"
|
||||
#include "mz_strm_os.h"
|
||||
#include "mz_strm_split.h"
|
||||
#include "mz_strm_zlib.h"
|
||||
#include "mz_zip.h"
|
||||
#include "mz_zip_rw.h"
|
||||
|
||||
namespace OCIO_NAMESPACE
|
||||
{
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
#include "Op.h"
|
||||
#include "ops/lut1d/Lut1DOp.h"
|
||||
#include "ops/lut3d/Lut3DOp.h"
|
||||
#include "ops/range/RangeOp.h"
|
||||
|
||||
namespace OCIO_NAMESPACE
|
||||
{
|
||||
@@ -241,7 +242,38 @@ int RemoveInverseOps(OpRcPtrVec & opVec, OptimizationFlags oFlags)
|
||||
// When a pair of inverse ops is removed, we want the optimized ops to give the
|
||||
// same result as the original. For certain ops such as Lut1D or Log this may
|
||||
// mean inserting a Range to emulate the clamping done by the original ops.
|
||||
auto replacedBy = op1->getIdentityReplacement();
|
||||
|
||||
OpRcPtr replacedBy;
|
||||
if (type1 == OpData::Lut1DType)
|
||||
{
|
||||
// Lut1D gets special handling so that both halfs of the pair are available.
|
||||
// Only the inverse LUT has the values needed to generate the replacement.
|
||||
|
||||
ConstLut1DOpDataRcPtr lut1 = OCIO_DYNAMIC_POINTER_CAST<const Lut1DOpData>(op1->data());
|
||||
ConstLut1DOpDataRcPtr lut2 = OCIO_DYNAMIC_POINTER_CAST<const Lut1DOpData>(op2->data());
|
||||
|
||||
OpDataRcPtr opData = lut1->getPairIdentityReplacement(lut2);
|
||||
|
||||
OpRcPtrVec ops;
|
||||
if (opData->getType() == OpData::MatrixType)
|
||||
{
|
||||
// No-op that will be optimized.
|
||||
auto mat = OCIO_DYNAMIC_POINTER_CAST<MatrixOpData>(opData);
|
||||
CreateMatrixOp(ops, mat, TRANSFORM_DIR_FORWARD);
|
||||
}
|
||||
else if (opData->getType() == OpData::RangeType)
|
||||
{
|
||||
// Clamping op.
|
||||
auto range = OCIO_DYNAMIC_POINTER_CAST<RangeOpData>(opData);
|
||||
CreateRangeOp(ops, range, TRANSFORM_DIR_FORWARD);
|
||||
}
|
||||
replacedBy = ops[0];
|
||||
}
|
||||
else
|
||||
{
|
||||
replacedBy = op1->getIdentityReplacement();
|
||||
}
|
||||
|
||||
replacedBy->finalize();
|
||||
if (replacedBy->isNoOp())
|
||||
{
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
#include <Logging.h>
|
||||
|
||||
#include "Platform.h"
|
||||
|
||||
#include "utils/StringUtils.h"
|
||||
|
||||
namespace OCIO_NAMESPACE
|
||||
{
|
||||
@@ -21,11 +21,87 @@ namespace OCIO_NAMESPACE
|
||||
|
||||
static constexpr char ErrorMsg[] { "Problem obtaining monitor profile information from operating system." };
|
||||
|
||||
// List all active display paths using QueryDisplayConfig and GetDisplayConfigBufferSizes.
|
||||
// Get the data from each path using DisplayConfigGetDeviceInfo.
|
||||
void getAllMonitorsWithQueryDisplayConfig(std::vector<std::tstring> & monitorsName)
|
||||
{
|
||||
// https://learn.microsoft.com/en-us/windows/win32/api/wingdi/ns-wingdi-displayconfig_path_info
|
||||
std::vector<DISPLAYCONFIG_PATH_INFO> paths;
|
||||
// https://learn.microsoft.com/en-us/windows/win32/api/wingdi/ns-wingdi-displayconfig_mode_info
|
||||
std::vector<DISPLAYCONFIG_MODE_INFO> modes;
|
||||
|
||||
UINT32 flags = QDC_ONLY_ACTIVE_PATHS | QDC_VIRTUAL_MODE_AWARE;
|
||||
LONG result = ERROR_SUCCESS;
|
||||
|
||||
do
|
||||
{
|
||||
// Determine how many path and mode structures to allocate.
|
||||
UINT32 pathCount, modeCount;
|
||||
// The GetDisplayConfigBufferSizes function retrieves the size of the buffers that are
|
||||
// required to call the QueryDisplayConfig function.
|
||||
result = GetDisplayConfigBufferSizes(flags, &pathCount, &modeCount);
|
||||
|
||||
// Allocate the path and mode arrays.
|
||||
paths.resize(pathCount);
|
||||
modes.resize(modeCount);
|
||||
|
||||
// The QueryDisplayConfig function retrieves information about all possible display paths
|
||||
// for all display devices, or views, in the current setting.
|
||||
result = QueryDisplayConfig(flags, &pathCount, paths.data(), &modeCount, modes.data(), nullptr);
|
||||
|
||||
// The function may have returned fewer paths/modes than estimated.
|
||||
paths.resize(pathCount);
|
||||
modes.resize(modeCount);
|
||||
|
||||
// It's possible that between the call to GetDisplayConfigBufferSizes and QueryDisplayConfig
|
||||
// that the display state changed, so loop on the case of ERROR_INSUFFICIENT_BUFFER.
|
||||
} while (result == ERROR_INSUFFICIENT_BUFFER);
|
||||
|
||||
if (result == ERROR_SUCCESS)
|
||||
{
|
||||
// For each active path
|
||||
for (auto& path : paths)
|
||||
{
|
||||
// The DISPLAYCONFIG_TARGET_DEVICE_NAME structure contains information about the target.
|
||||
// Find the target (monitor) friendly name
|
||||
DISPLAYCONFIG_TARGET_DEVICE_NAME targetName = {};
|
||||
targetName.header.adapterId = path.targetInfo.adapterId;
|
||||
targetName.header.id = path.targetInfo.id;
|
||||
targetName.header.type = DISPLAYCONFIG_DEVICE_INFO_GET_TARGET_NAME;
|
||||
targetName.header.size = sizeof(targetName);
|
||||
result = DisplayConfigGetDeviceInfo(&targetName.header);
|
||||
|
||||
if (result == ERROR_SUCCESS)
|
||||
{
|
||||
monitorsName.push_back(
|
||||
(result == ERROR_SUCCESS && targetName.flags.friendlyNameFromEdid) ?
|
||||
targetName.monitorFriendlyDeviceName : L""
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Populate the internal structure with monitors name and ICC profiles name.
|
||||
*
|
||||
* Expected monitor display name:
|
||||
*
|
||||
* DISPLAYn, <monitorFriendlyDeviceName | DeviceString>
|
||||
*
|
||||
* where n is a positive integer starting at 1.
|
||||
* where monitorFriendlyDeviceName comes from DISPLAYCONFIG_TARGET_DEVICE_NAME structure.
|
||||
* where DeviceString comes from DISPLAY_DEVICE structure.
|
||||
*
|
||||
*/
|
||||
void SystemMonitorsImpl::getAllMonitors()
|
||||
{
|
||||
m_monitors.clear();
|
||||
|
||||
std::vector<std::tstring> friendlyMonitorNames;
|
||||
getAllMonitorsWithQueryDisplayConfig(friendlyMonitorNames);
|
||||
|
||||
// Initialize the structure.
|
||||
DISPLAY_DEVICE dispDevice;
|
||||
ZeroMemory(&dispDevice, sizeof(dispDevice));
|
||||
@@ -33,6 +109,7 @@ void SystemMonitorsImpl::getAllMonitors()
|
||||
|
||||
// Iterate over all the monitors.
|
||||
DWORD dispNum = 0;
|
||||
// After the first call to EnumDisplayDevices, dispDevice.DeviceString is the adapter name.
|
||||
while (EnumDisplayDevices(nullptr, dispNum, &dispDevice, 0))
|
||||
{
|
||||
const std::tstring deviceName = dispDevice.DeviceName;
|
||||
@@ -49,9 +126,10 @@ void SystemMonitorsImpl::getAllMonitors()
|
||||
ZeroMemory(&dispDevice, sizeof(dispDevice));
|
||||
dispDevice.cb = sizeof(dispDevice);
|
||||
|
||||
// After a second call, dispDev.DeviceString contains the
|
||||
// monitor name for that device.
|
||||
EnumDisplayDevices(deviceName.c_str(), dispNum, &dispDevice, 0);
|
||||
// After second call, dispDevice.DeviceString is the monitor name for that device.
|
||||
// Second parameters must be 0 to get the monitor name.
|
||||
// See https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-enumdisplaydevicesw
|
||||
EnumDisplayDevices(deviceName.c_str(), 0, &dispDevice, 0);
|
||||
|
||||
TCHAR icmPath[MAX_PATH + 1];
|
||||
DWORD pathLength = MAX_PATH;
|
||||
@@ -60,8 +138,23 @@ void SystemMonitorsImpl::getAllMonitors()
|
||||
|
||||
// TODO: Several ICM profiles could be associated to a single device.
|
||||
|
||||
const std::tstring displayName
|
||||
= deviceName + TEXT(", ") + dispDevice.DeviceString;
|
||||
bool idxExists = friendlyMonitorNames.size() >= dispNum+1;
|
||||
bool friendlyNameExists = idxExists && !friendlyMonitorNames.at(dispNum).empty();
|
||||
|
||||
// Check if the distNum index exists in friendlyMonitorNames vector and check if
|
||||
// there is a corresponding friendly name.
|
||||
const std::tstring extra = friendlyNameExists ?
|
||||
friendlyMonitorNames.at(dispNum) : std::tstring(dispDevice.DeviceString);
|
||||
|
||||
std::tstring strippedDeviceName = deviceName;
|
||||
if(StringUtils::StartsWith(Platform::Utf16ToUtf8(deviceName), "\\\\.\\DISPLAY"))
|
||||
{
|
||||
// Remove the slashes.
|
||||
std::string prefix = "\\\\.\\";
|
||||
strippedDeviceName = deviceName.substr(prefix.length());
|
||||
}
|
||||
|
||||
const std::tstring displayName = strippedDeviceName + TEXT(", ") + extra;
|
||||
|
||||
// Get the associated ICM profile path.
|
||||
if (GetICMProfile(hDC, &pathLength, icmPath))
|
||||
@@ -98,5 +191,4 @@ void SystemMonitorsImpl::getAllMonitors()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
} // namespace OCIO_NAMESPACE
|
||||
|
||||
@@ -279,6 +279,86 @@ OpDataRcPtr Lut1DOpData::getIdentityReplacement() const
|
||||
return res;
|
||||
}
|
||||
|
||||
OpDataRcPtr Lut1DOpData::getPairIdentityReplacement(ConstLut1DOpDataRcPtr & lut2) const
|
||||
{
|
||||
OpDataRcPtr res;
|
||||
if (isInputHalfDomain())
|
||||
{
|
||||
// TODO: If a half-domain LUT has a flat spot, it would be more appropriate
|
||||
// to use a Range, since some areas would be clamped in a round-trip.
|
||||
// Currently leaving this a Matrix since it is a potential work-around
|
||||
// for situations where you want a pair identity of LUTs to be totally
|
||||
// removed, even if it omits some clamping at extreme values.
|
||||
res = std::make_shared<MatrixOpData>();
|
||||
}
|
||||
else
|
||||
{
|
||||
// Note that the ops have been finalized by the time this is called,
|
||||
// Therefore, for an inverse Lut1D, it means initializeFromForward() has
|
||||
// been called and so any reversals have been converted to flat regions.
|
||||
// Therefore, the first and last LUT entries are the extreme values and
|
||||
// the ComponentProperties has been initialized, but only for the op
|
||||
// whose direction is INVERSE.
|
||||
const Lut1DOpData * invLut = (m_direction == TRANSFORM_DIR_INVERSE)
|
||||
? this: lut2.get();
|
||||
const ComponentProperties & redProperties = invLut->getRedProperties();
|
||||
const unsigned long length = invLut->getArray().getLength();
|
||||
|
||||
// If the start or end of the LUT contains a flat region, that will cause
|
||||
// a round-trip to be limited.
|
||||
|
||||
double minValue = 0.;
|
||||
double maxValue = 1.;
|
||||
switch (m_direction)
|
||||
{
|
||||
case TRANSFORM_DIR_FORWARD: // Fwd Lut1D -> Inv Lut1D
|
||||
{
|
||||
// A round-trip in this order will impose at least a clamp to [0,1]
|
||||
// based on what happens entering the first Fwd Lut1D. However, the
|
||||
// clamping may be to an even narrower range if there are flat regions.
|
||||
//
|
||||
// The flat region limitation is imposed based on the where it falls
|
||||
// relative to the [0,1] input domain.
|
||||
|
||||
// TODO: A RangeOp has one min & max for all channels, whereas a Lut1D may
|
||||
// have three independent channels. Potentially could look at all chans
|
||||
// and take the extrema of each? For now, just using the first channel.
|
||||
const unsigned long minIndex = redProperties.startDomain;
|
||||
const unsigned long maxIndex = redProperties.endDomain;
|
||||
|
||||
minValue = (double)minIndex / (length - 1);
|
||||
maxValue = (double)maxIndex / (length - 1);
|
||||
break;
|
||||
}
|
||||
case TRANSFORM_DIR_INVERSE: // Inv Lut1D -> Fwd Lut1D
|
||||
{
|
||||
// A round-trip in this order will impose a clamp, but it may be to
|
||||
// bounds outside of [0,1] since the Fwd LUT may contain values outside
|
||||
// [0,1] and so the Inv LUT will accept inputs on that extended range.
|
||||
//
|
||||
// The flat region limitation is imposed based on the output range.
|
||||
|
||||
const bool isIncreasing = redProperties.isIncreasing;
|
||||
const unsigned long maxChannels = invLut->getArray().getMaxColorComponents();
|
||||
const unsigned long lastValIndex = (length - 1) * maxChannels;
|
||||
// Note that the array for the invLut has had initializeFromForward()
|
||||
// done and so any reversals have been converted to flat regions and
|
||||
// the extrema are at the beginning & end of the LUT.
|
||||
const Array::Values & lutValues = invLut->getArray().getValues();
|
||||
|
||||
// TODO: Currently only basing this on the red channel.
|
||||
minValue = isIncreasing ? lutValues[0] : lutValues[lastValIndex];
|
||||
maxValue = isIncreasing ? lutValues[lastValIndex] : lutValues[0];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
res = std::make_shared<RangeOpData>(minValue, maxValue,
|
||||
minValue, maxValue);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
void Lut1DOpData::setInputHalfDomain(bool isHalfDomain) noexcept
|
||||
{
|
||||
m_halfFlags = (isHalfDomain) ?
|
||||
|
||||
@@ -179,6 +179,8 @@ public:
|
||||
|
||||
OpDataRcPtr getIdentityReplacement() const override;
|
||||
|
||||
OpDataRcPtr getPairIdentityReplacement(ConstLut1DOpDataRcPtr & lut2) const;
|
||||
|
||||
inline const ComponentProperties & getRedProperties() const
|
||||
{
|
||||
return m_componentProperties[0];
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# Copyright Contributors to the OpenColorIO Project.
|
||||
|
||||
libdir=@CMAKE_INSTALL_FULL_LIBDIR@
|
||||
includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@
|
||||
|
||||
Name: OpenColorIO
|
||||
Description: A color management framework for visual effects and animation
|
||||
Version: @OCIO_VERSION_FULL_STR@
|
||||
Cflags: -I${includedir}
|
||||
Libs: -L${libdir} -lOpenColorIO
|
||||
@@ -282,6 +282,16 @@ bool CollectContextVariables(const Config &,
|
||||
usedContextVars->addStringVars(ctxFilepath);
|
||||
}
|
||||
|
||||
// Check if the CCCID is using a context variable and add it to the context if that's the case.
|
||||
ContextRcPtr ctxCCCID = Context::Create();
|
||||
const char * cccid = tr.getCCCId();
|
||||
std::string resolvedCCCID = context.resolveStringVar(cccid, ctxCCCID);
|
||||
if (0 != strcmp(resolvedCCCID.c_str(), cccid))
|
||||
{
|
||||
foundContextVars = true;
|
||||
usedContextVars->addStringVars(ctxCCCID);
|
||||
}
|
||||
|
||||
return foundContextVars;
|
||||
}
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ target_link_libraries(ocioarchive
|
||||
PRIVATE
|
||||
apputils
|
||||
OpenColorIO
|
||||
minizip-ng::minizip-ng
|
||||
MINIZIP::minizip-ng
|
||||
)
|
||||
|
||||
install(TARGETS ocioarchive
|
||||
|
||||
@@ -13,11 +13,11 @@ namespace OCIO = OCIO_NAMESPACE;
|
||||
#include "apputils/argparse.h"
|
||||
|
||||
// Config archive functionality.
|
||||
#include "minizip-ng/mz.h"
|
||||
#include "minizip-ng/mz_os.h"
|
||||
#include "minizip-ng/mz_strm.h"
|
||||
#include "minizip-ng/mz_zip.h"
|
||||
#include "minizip-ng/mz_zip_rw.h"
|
||||
#include "mz.h"
|
||||
#include "mz_os.h"
|
||||
#include "mz_strm.h"
|
||||
#include "mz_zip.h"
|
||||
#include "mz_zip_rw.h"
|
||||
|
||||
// Array of non OpenColorIO arguments.
|
||||
static std::vector<std::string> args;
|
||||
|
||||
@@ -2,6 +2,129 @@
|
||||
|
||||
include(CMakeFindDependencyMacro)
|
||||
|
||||
if (NOT @BUILD_SHARED_LIBS@) # NOT @BUILD_SHARED_LIBS@
|
||||
if (APPLE)
|
||||
# Store the previous value of CMAKE_FIND_FRAMEWORK and CMAKE_FIND_APPBUNDLE.
|
||||
set(_PREVIOUS_CMAKE_FIND_FRAMEWORK ${CMAKE_FIND_FRAMEWORK})
|
||||
set(_PREVIOUS_CMAKE_FIND_APPBUNDLE ${CMAKE_FIND_APPBUNDLE})
|
||||
|
||||
# Prioritize other paths before Frameworks and Appbundle for find_path, find_library and
|
||||
# find_package.
|
||||
set(CMAKE_FIND_FRAMEWORK LAST)
|
||||
set(CMAKE_FIND_APPBUNDLE LAST)
|
||||
endif()
|
||||
|
||||
# Get the install directory.
|
||||
set(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_DIR}")
|
||||
# Get the install directory. Since the current file is under
|
||||
# <install directory>/lib/cmake/OpenColorIO going back three directory.
|
||||
foreach(i RANGE 1 3)
|
||||
get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
|
||||
if(_IMPORT_PREFIX STREQUAL "/")
|
||||
set(_IMPORT_PREFIX "")
|
||||
break()
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
# Append OCIO custom find module path.
|
||||
list(APPEND CMAKE_MODULE_PATH "${_IMPORT_PREFIX}/share/OpenColorIO/cmake/modules")
|
||||
list(APPEND CMAKE_MODULE_PATH "${_IMPORT_PREFIX}/share/OpenColorIO/cmake/macros")
|
||||
|
||||
########################
|
||||
# Required dependencies
|
||||
########################
|
||||
|
||||
if (NOT expat::expat)
|
||||
find_dependency(expat @expat_VERSION@)
|
||||
endif()
|
||||
|
||||
if (NOT Imath::Imath)
|
||||
find_dependency(Imath @Imath_VERSION@)
|
||||
endif()
|
||||
|
||||
if (NOT pystring::pystring)
|
||||
find_dependency(pystring @pystring_VERSION@)
|
||||
endif()
|
||||
|
||||
if (NOT yaml-cpp)
|
||||
find_dependency(yaml-cpp @yaml-cpp_VERSION@)
|
||||
endif()
|
||||
|
||||
if (NOT ZLIB::ZLIB)
|
||||
# ZLIB_VERSION is available starting CMake 3.26+.
|
||||
# ZLIB_VERSION_STRING is still available for backward compatibility.
|
||||
# See https://cmake.org/cmake/help/git-stage/module/FindZLIB.html
|
||||
|
||||
# ZLIB_USE_STATIC_LIBS is supported only from CMake 3.24+.
|
||||
if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.24.0")
|
||||
if (ZLIB_STATIC_LIBRARY)
|
||||
set(ZLIB_USE_STATIC_LIBS "${ZLIB_STATIC_LIBRARY}")
|
||||
endif()
|
||||
else() # For CMake < 3.24 since ZLIB_USE_STATIC_LIBS is not available.
|
||||
if(NOT ZLIB_LIBRARY)
|
||||
if(DEFINED CMAKE_FIND_LIBRARY_PREFIXES)
|
||||
set(_ZLIB_ORIG_CMAKE_FIND_LIBRARY_PREFIXES "${CMAKE_FIND_LIBRARY_PREFIXES}")
|
||||
else()
|
||||
set(_ZLIB_ORIG_CMAKE_FIND_LIBRARY_PREFIXES)
|
||||
endif()
|
||||
|
||||
if(DEFINED CMAKE_FIND_LIBRARY_SUFFIXES)
|
||||
set(_ZLIB_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES "${CMAKE_FIND_LIBRARY_SUFFIXES}")
|
||||
else()
|
||||
set(_ZLIB_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES)
|
||||
endif()
|
||||
|
||||
# Prefix/suffix for windows.
|
||||
if(WIN32)
|
||||
list(APPEND CMAKE_FIND_LIBRARY_PREFIXES "" "lib")
|
||||
list(APPEND CMAKE_FIND_LIBRARY_SUFFIXES ".dll.a")
|
||||
endif()
|
||||
|
||||
# Check if static lib is preferred.
|
||||
if(ZLIB_STATIC_LIBRARY OR ZLIB_USE_STATIC_LIBS)
|
||||
if(WIN32)
|
||||
set(CMAKE_FIND_LIBRARY_SUFFIXES .lib .a ${CMAKE_FIND_LIBRARY_SUFFIXES})
|
||||
else()
|
||||
set(CMAKE_FIND_LIBRARY_SUFFIXES .a)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if (@ZLIB_VERSION@) # @ZLIB_VERSION@
|
||||
find_dependency(ZLIB @ZLIB_VERSION@)
|
||||
else()
|
||||
find_dependency(ZLIB @ZLIB_VERSION_STRING@)
|
||||
endif()
|
||||
|
||||
# Restore the original find library ordering
|
||||
if(DEFINED _ZLIB_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES)
|
||||
set(CMAKE_FIND_LIBRARY_SUFFIXES "${_ZLIB_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES}")
|
||||
else()
|
||||
set(CMAKE_FIND_LIBRARY_SUFFIXES)
|
||||
endif()
|
||||
|
||||
if(DEFINED _ZLIB_ORIG_CMAKE_FIND_LIBRARY_PREFIXES)
|
||||
set(CMAKE_FIND_LIBRARY_PREFIXES "${_ZLIB_ORIG_CMAKE_FIND_LIBRARY_PREFIXES}")
|
||||
else()
|
||||
set(CMAKE_FIND_LIBRARY_PREFIXES)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if (NOT MINIZIP::minizip-ng)
|
||||
find_dependency(minizip-ng @minizip-ng_VERSION@)
|
||||
endif()
|
||||
|
||||
# Remove OCIO custom find module path.
|
||||
list(REMOVE_AT CMAKE_MODULE_PATH -1)
|
||||
|
||||
if (APPLE)
|
||||
# Restore CMAKE_FIND_FRAMEWORK and CMAKE_FIND_APPBUNDLE values.
|
||||
set(CMAKE_FIND_FRAMEWORK ${_PREVIOUS_CMAKE_FIND_FRAMEWORK})
|
||||
set(CMAKE_FIND_APPBUNDLE ${_PREVIOUS_CMAKE_FIND_APPBUNDLE})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
include(${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake)
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
|
||||
@@ -23,7 +23,7 @@ function(add_ocio_test NAME SOURCES PRIVATE_INCLUDES)
|
||||
utils::strings
|
||||
yaml-cpp
|
||||
testutils
|
||||
minizip-ng::minizip-ng
|
||||
MINIZIP::minizip-ng
|
||||
xxHash
|
||||
)
|
||||
|
||||
|
||||
@@ -898,6 +898,19 @@ colorspaces:
|
||||
OCIO_CHECK_EQUAL_FROM(isLinearToDisplayReference, bDisplayExpected, line);
|
||||
};
|
||||
|
||||
// Test undefined color spaces.
|
||||
{
|
||||
OCIO_CHECK_THROW_WHAT(
|
||||
config->isColorSpaceLinear("colorspace_abc", OCIO::REFERENCE_SPACE_SCENE), OCIO::Exception,
|
||||
"Could not test colorspace linearity. Colorspace colorspace_abc does not exist"
|
||||
);
|
||||
|
||||
OCIO_CHECK_THROW_WHAT(
|
||||
config->isColorSpaceLinear("colorspace_abc", OCIO::REFERENCE_SPACE_DISPLAY), OCIO::Exception,
|
||||
"Could not test colorspace linearity. Colorspace colorspace_abc does not exist"
|
||||
);
|
||||
}
|
||||
|
||||
{
|
||||
testSceneReferred("display_data", false, __LINE__);
|
||||
testSceneReferred("display_linear-enc", false, __LINE__);
|
||||
|
||||
@@ -7833,6 +7833,61 @@ OCIO_ADD_TEST(Config, context_variables_typical_use_cases)
|
||||
cfg->getProcessor(ctx2, "cs1", "cs2").get());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Case 7 - Context variables in the FileTransform's CCCID.
|
||||
{
|
||||
static const std::string CONFIG =
|
||||
"ocio_profile_version: 2\n"
|
||||
"\n"
|
||||
"environment:\n"
|
||||
" CCPREFIX: cc\n"
|
||||
"\n"
|
||||
"search_path: " + OCIO::GetTestFilesDir() + "\n"
|
||||
"\n"
|
||||
"roles:\n"
|
||||
" default: cs1\n"
|
||||
"\n"
|
||||
"displays:\n"
|
||||
" disp1:\n"
|
||||
" - !<View> {name: view1, colorspace: cs2}\n"
|
||||
"\n"
|
||||
"colorspaces:\n"
|
||||
" - !<ColorSpace>\n"
|
||||
" name: cs1\n"
|
||||
"\n"
|
||||
" - !<ColorSpace>\n"
|
||||
" name: cs2\n"
|
||||
" from_scene_reference: !<FileTransform> {src: cdl_test1.ccc, cccid: $CCPREFIX00$CCNUM}\n";
|
||||
|
||||
std::istringstream iss;
|
||||
iss.str(CONFIG);
|
||||
|
||||
OCIO::ConfigRcPtr cfg;
|
||||
OCIO_CHECK_NO_THROW(cfg = OCIO::Config::CreateFromStream(iss)->createEditableCopy());
|
||||
OCIO_CHECK_NO_THROW(cfg->validate());
|
||||
|
||||
OCIO::ConstTransformRcPtr ctf = cfg->getColorSpace("cs2")->getTransform(
|
||||
OCIO::COLORSPACE_DIR_FROM_REFERENCE
|
||||
);
|
||||
OCIO_REQUIRE_ASSERT(ctf);
|
||||
|
||||
OCIO::ContextRcPtr ctx = cfg->getCurrentContext()->createEditableCopy();
|
||||
|
||||
ctx->setStringVar("CCNUM", "01");
|
||||
OCIO::ConstProcessorRcPtr p1 = cfg->getProcessor(ctx, ctf, OCIO::TRANSFORM_DIR_FORWARD);
|
||||
|
||||
ctx->setStringVar("CCNUM", "02");
|
||||
OCIO::ConstProcessorRcPtr p2 = cfg->getProcessor(ctx, ctf, OCIO::TRANSFORM_DIR_FORWARD);
|
||||
|
||||
ctx->setStringVar("CCNUM", "03");
|
||||
OCIO::ConstProcessorRcPtr p3 = cfg->getProcessor(ctx, ctf, OCIO::TRANSFORM_DIR_FORWARD);
|
||||
|
||||
// All three processors should be different.
|
||||
OCIO_CHECK_NE(p1.get(), p2.get());
|
||||
OCIO_CHECK_NE(p1.get(), p3.get());
|
||||
OCIO_CHECK_NE(p2.get(), p3.get());
|
||||
}
|
||||
}
|
||||
|
||||
OCIO_ADD_TEST(Config, virtual_display)
|
||||
|
||||
@@ -645,6 +645,63 @@ OCIO_ADD_TEST(OpOptimizers, lut1d_identity_replacement)
|
||||
}
|
||||
}
|
||||
|
||||
OCIO_ADD_TEST(OpOptimizers, lut1d_identity_replacement_order)
|
||||
{
|
||||
// See issue #1737, https://github.com/AcademySoftwareFoundation/OpenColorIO/issues/1737.
|
||||
|
||||
// This CTF contains a single LUT1D, inverse direction, normal (not half) domain.
|
||||
// It contains values from -6 to +3.4.
|
||||
const std::string fileName("lut1d_inverse_gpu.ctf");
|
||||
OCIO::ContextRcPtr context = OCIO::Context::Create();
|
||||
|
||||
OCIO::OpRcPtrVec inv_ops;
|
||||
OCIO_CHECK_NO_THROW(OCIO::BuildOpsTest(inv_ops, fileName, context,
|
||||
// FWD direction simply means don't swap the direction, the
|
||||
// file contains an inverse LUT1D and leave it that way.
|
||||
OCIO::TRANSFORM_DIR_FORWARD));
|
||||
OCIO::OpRcPtrVec fwd_ops;
|
||||
OCIO_CHECK_NO_THROW(OCIO::BuildOpsTest(fwd_ops, fileName, context,
|
||||
OCIO::TRANSFORM_DIR_INVERSE));
|
||||
|
||||
// Check forward LUT1D followed by inverse LUT1D.
|
||||
{
|
||||
OCIO::OpRcPtrVec fwd_inv_ops = fwd_ops;
|
||||
fwd_inv_ops += inv_ops;
|
||||
|
||||
OCIO_CHECK_NO_THROW(fwd_inv_ops.finalize());
|
||||
OCIO_CHECK_NO_THROW(fwd_inv_ops.optimize(OCIO::OPTIMIZATION_NONE));
|
||||
OCIO_CHECK_EQUAL(fwd_inv_ops.size(), 2); // no optmization was done
|
||||
|
||||
OCIO::OpRcPtrVec optOps = fwd_inv_ops.clone();
|
||||
OCIO_CHECK_NO_THROW(optOps.finalize());
|
||||
OCIO_CHECK_NO_THROW(optOps.optimize(OCIO::OPTIMIZATION_DEFAULT));
|
||||
OCIO_CHECK_EQUAL(optOps.size(), 1);
|
||||
OCIO_CHECK_EQUAL(optOps[0]->getInfo(), "<RangeOp>");
|
||||
|
||||
// Compare renders.
|
||||
CompareRender(fwd_inv_ops, optOps, __LINE__, 1e-6f);
|
||||
}
|
||||
|
||||
// Check inverse LUT1D followed by forward LUT1D.
|
||||
{
|
||||
OCIO::OpRcPtrVec inv_fwd_ops = inv_ops;
|
||||
inv_fwd_ops += fwd_ops;
|
||||
|
||||
OCIO_CHECK_NO_THROW(inv_fwd_ops.finalize());
|
||||
OCIO_CHECK_NO_THROW(inv_fwd_ops.optimize(OCIO::OPTIMIZATION_NONE));
|
||||
OCIO_CHECK_EQUAL(inv_fwd_ops.size(), 2); // no optmization was done
|
||||
|
||||
OCIO::OpRcPtrVec optOps = inv_fwd_ops.clone();
|
||||
OCIO_CHECK_NO_THROW(optOps.finalize());
|
||||
OCIO_CHECK_NO_THROW(optOps.optimize(OCIO::OPTIMIZATION_DEFAULT));
|
||||
OCIO_CHECK_EQUAL(optOps.size(), 1);
|
||||
OCIO_CHECK_EQUAL(optOps[0]->getInfo(), "<RangeOp>");
|
||||
|
||||
// Compare renders.
|
||||
CompareRender(inv_fwd_ops, optOps, __LINE__, 1e-6f);
|
||||
}
|
||||
}
|
||||
|
||||
OCIO_ADD_TEST(OpOptimizers, lut1d_half_domain_keep_prior_range)
|
||||
{
|
||||
// A half-domain LUT should not allow removal of a prior range op.
|
||||
|
||||
@@ -431,4 +431,56 @@ OCIO_ADD_TEST(FileTransform, context_variables)
|
||||
|
||||
// A basic check to validate that context variables are correctly used.
|
||||
OCIO_CHECK_NO_THROW(cfg->getProcessor(ctx, file, OCIO::TRANSFORM_DIR_FORWARD));
|
||||
|
||||
|
||||
{
|
||||
// Case 4 - The 'cccid' now contains a context variable
|
||||
static const std::string CONFIG =
|
||||
"ocio_profile_version: 2\n"
|
||||
"\n"
|
||||
"environment:\n"
|
||||
" CCPREFIX: cc\n"
|
||||
" CCNUM: 02\n"
|
||||
"\n"
|
||||
"search_path: " + OCIO::GetTestFilesDir() + "\n"
|
||||
"\n"
|
||||
"roles:\n"
|
||||
" default: cs1\n"
|
||||
"\n"
|
||||
"displays:\n"
|
||||
" disp1:\n"
|
||||
" - !<View> {name: view1, colorspace: cs2}\n"
|
||||
"\n"
|
||||
"colorspaces:\n"
|
||||
" - !<ColorSpace>\n"
|
||||
" name: cs1\n"
|
||||
"\n"
|
||||
" - !<ColorSpace>\n"
|
||||
" name: cs2\n"
|
||||
" from_scene_reference: !<FileTransform> {src: cdl_test1.ccc, cccid: $CCPREFIX00$CCNUM}\n";
|
||||
|
||||
std::istringstream iss;
|
||||
iss.str(CONFIG);
|
||||
|
||||
OCIO::ConstConfigRcPtr cfg;
|
||||
OCIO_CHECK_NO_THROW(cfg = OCIO::Config::CreateFromStream(iss));
|
||||
OCIO_CHECK_NO_THROW(cfg->validate());
|
||||
|
||||
ctx = cfg->getCurrentContext()->createEditableCopy();
|
||||
OCIO_CHECK_NO_THROW(ctx->setStringVar("CCNUM", "01"));
|
||||
|
||||
usedContextVars = OCIO::Context::Create(); // New & empty instance.
|
||||
OCIO::ConstTransformRcPtr tr1 = cfg->getColorSpace("cs2")->getTransform(
|
||||
OCIO::COLORSPACE_DIR_FROM_REFERENCE
|
||||
);
|
||||
OCIO::ConstFileTransformRcPtr fTr1 = OCIO::DynamicPtrCast<const OCIO::FileTransform>(tr1);
|
||||
OCIO_CHECK_ASSERT(fTr1);
|
||||
|
||||
OCIO_CHECK_ASSERT(CollectContextVariables(*cfg, *ctx, *fTr1, usedContextVars));
|
||||
OCIO_CHECK_EQUAL(2, usedContextVars->getNumStringVars());
|
||||
OCIO_CHECK_EQUAL(std::string("CCPREFIX"), usedContextVars->getStringVarNameByIndex(0));
|
||||
OCIO_CHECK_EQUAL(std::string("cc"), usedContextVars->getStringVarByIndex(0));
|
||||
OCIO_CHECK_EQUAL(std::string("CCNUM"), usedContextVars->getStringVarNameByIndex(1));
|
||||
OCIO_CHECK_EQUAL(std::string("01"), usedContextVars->getStringVarByIndex(1));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -579,6 +579,12 @@ colorspaces:
|
||||
)
|
||||
self.assertEqual(is_linear_to_display_reference, expected_value)
|
||||
|
||||
# Test undefined color spaces.
|
||||
with self.assertRaises(OCIO.Exception):
|
||||
cfg.isColorSpaceLinear('colorspace_abc', OCIO.REFERENCE_SPACE_SCENE)
|
||||
with self.assertRaises(OCIO.Exception):
|
||||
cfg.isColorSpaceLinear('colorspace_abc', OCIO.REFERENCE_SPACE_DISPLAY)
|
||||
|
||||
# Test the scene referred color spaces.
|
||||
test_scene_referred(self, cfg, "display_data", False)
|
||||
test_scene_referred(self, cfg, "display_linear-enc", False)
|
||||
|
||||
@@ -282,9 +282,6 @@ class ArchiveContextTest(unittest.TestCase):
|
||||
cdl = processor.createGroupTransform()[0]
|
||||
self.assertEqual(cdl.getSlope()[0], 0.9)
|
||||
|
||||
# FIXME: There is a bug with the Processor cache, this clears it.
|
||||
self.CONFIG.setStrictParsingEnabled(False)
|
||||
|
||||
self.CONTEXT['CCCID'] = 'look-03'
|
||||
processor = self.CONFIG.getProcessor(self.CONTEXT,
|
||||
look_transform,
|
||||
@@ -292,9 +289,6 @@ class ArchiveContextTest(unittest.TestCase):
|
||||
cdl = processor.createGroupTransform()[0]
|
||||
self.assertEqual(cdl.getSlope()[0], 1.2)
|
||||
|
||||
# FIXME: There is a bug with the Processor cache, this clears it.
|
||||
self.CONFIG.setStrictParsingEnabled(False)
|
||||
|
||||
self.CONTEXT['CCCID'] = 'look-01'
|
||||
processor = self.CONFIG.getProcessor(self.CONTEXT,
|
||||
look_transform,
|
||||
|
||||
Reference in New Issue
Block a user