Patch release with several bug fixes, enhancements, and build improvements.
-
🐛 A limit of
UINT_MAXdeep samples per pixel is now enforced, which prevents an integer overflow when using theCompositeDeepScanLineAPI to combine multiple deep parts. -
🔧 In
IlmThreadPool, replace deprecatedstd::atomic_load/std::atomic_exchangeoverloads forstd::shared_ptrwith the C++20std::atomic<std::shared_ptr<T>>interface when available. -
🐛 The
ZIPandZIPSCompressor objects had incorrect compression types set, although the ill effects were minimal as the value is seldom used. -
🐛 Enable SSE2 on 32-bit x86 builds to fix test failures
Build improvements:
-
🛠️ OpenEXR now ships with an internal "vendored" copy of the
OpenJPHlibrary. At configuration time, if CMake finds an external installation ofOpenJPH, it will use it, but if that fails, or the CMake configuration optionOPENEXR_FORCE_INTERNAL_OPENJPHis set, it will use the internal copy. For OpenEXR v3.4.6, the vendored version of OpenJPH is 0.26.3. -
🛠️ A new CMake build option
DOPENEXR_FORCE_EMBEDDED_COREbuilds theOpenEXRCorelibrary statically and links it into theOpenEXRlibrary with symbols hidden, making it possible to link multiple versions of OpenEXR into the same executable. TheOpenEXRlibrary has namespaces for this situation, but theOpenEXRCorelibrary is written in C with no configurable namespace. See Linking Multiple OpenEXR Versions in the Same Executable for details. -
🛠️ Fix build failure with
-march=sandybridge
Python:
-
🐍 ✨ Add python support for Opaque Attributes
-
🚀 Python module I/O operations now release the GIL, preventing blocking.
Tools:
- ✨ Add sanity check for correct arguments to exrstdattr, to catch mistakes such as
exrstdattr input.exr output.exr -comment hellowhich would formerly write to a file calledhellobut now fails with a usage error.
Also, this release bumps the vendored version of libdeflate to 1.25.