|
1 | 1 | # OpenEXR Release Notes |
2 | 2 |
|
| 3 | +* [Version 3.1.0](#version-310-july-22-2021) July 22, 2021 |
3 | 4 | * [Version 3.0.5](#version-305-july-1-2021) July 1, 2021 |
4 | 5 | * [Version 3.0.4](#version-304-june-3-2021) June 3, 2021 |
5 | 6 | * [Version 3.0.3](#version-303-may-18-2021) May 18, 2021 |
|
49 | 50 | * [Version 1.0.1](#version-101) |
50 | 51 | * [Version 1.0](#version-10) |
51 | 52 |
|
| 53 | +## Version 3.1.0 (July 22, 2021) |
| 54 | + |
| 55 | +The 3.1 release of OpenEXR introduces a new library, OpenEXRCore, |
| 56 | +which is the result of a significant re-thinking of how OpenEXR |
| 57 | +manages file I/O and provides access to image data. It begins to |
| 58 | +address long-standing scalability issues with multithreaded image |
| 59 | +reading and writing. |
| 60 | + |
| 61 | +The OpenEXRCore library provides thread-safe, non-blocking access to |
| 62 | +files, which was not possible with the current API, where the |
| 63 | +framebuffer management is separate from read requests. It is written |
| 64 | +entirely in C and provides a new C-language API alongside the existing |
| 65 | +C++ API. This new low-level API allows applications to do custom |
| 66 | +unpacking of EXR data, such as on the GPU, while still benefiting from |
| 67 | +efficient I/O, file validation, and other semantics. It provides |
| 68 | +efficient direct access to EXR files in texturing applications. This C |
| 69 | +library also introduces an easier path to implementing OpenEXR |
| 70 | +bindings in other languages, such as Rust. |
| 71 | + |
| 72 | +The 3.1 release represents a technology preview for upcoming |
| 73 | +releases. The initial release is incremental; the existing API and |
| 74 | +underlying behavior has not changed. The new API is available now for |
| 75 | +performance validation testing, and then in future OpenEXR releases, |
| 76 | +the C++ API will migrate to use the new core in stages. It is not the |
| 77 | +intention to entirely deprecate the C++ API, nor must all applications |
| 78 | +re-implement EXR I/O in terms of the C library. The C API does not, |
| 79 | +and will not, provide the rich set of utility classes that exist in |
| 80 | +the C++ layer. The 3.1 release of the OpenEXRCore library simply |
| 81 | +offers new functionality for specialty applications seeking the |
| 82 | +highest possible performance. In the future, the ABI will evolve, but |
| 83 | +the API will remain consistent, or only have additions. |
| 84 | + |
| 85 | +Technical Design |
| 86 | + |
| 87 | +The OpenEXRCore API introduces a ``context`` object to manage file |
| 88 | +I/O. The context provides customization for I/O, memory allocation, |
| 89 | +and error handling. This makes it possible to use a decode and/or |
| 90 | +encode pipeline to customize how the chunks are written and read, and |
| 91 | +how they are packed or unpacked. |
| 92 | + |
| 93 | +The OpenEXRCore library is built around the concept of “chunks”, or |
| 94 | +atomic blocks of data in a file, the smallest unit of data to be read |
| 95 | +or written. The contents of a chunk vary from file to file based on |
| 96 | +compression (i.e. zip and zips) and layout (scanline |
| 97 | +vs. tiled). Currently this is either 1, 16, or 32 scanlines, or 1 tile |
| 98 | +(or subset of a tile on edge boundaries / small mip level). |
| 99 | + |
| 100 | +The OpenEXRCore library is specifically designed for multipart EXR |
| 101 | +files. It will continue to produce legacy-compatible single part files |
| 102 | +as needed, but the API assumes you are always dealing with a |
| 103 | +multi-part file. It also fully supports attributes, although being C, |
| 104 | +it lacks some of the C++ layer’s abstraction. |
| 105 | + |
| 106 | +Limitations: |
| 107 | + |
| 108 | +* No support yet for DWAA and DWAB compression during decode and |
| 109 | + encode pipelines. The low-level chunk I/O still works with DWAA and |
| 110 | + DWAB compressed files, but the encoder and decoder are not yet |
| 111 | + included in this release. |
| 112 | + |
| 113 | +* For deep files, reading of deep data is functional, but the path for |
| 114 | + encoding deep data into chunk-level data (i.e. packing and |
| 115 | + compressing) is not yet complete. |
| 116 | + |
| 117 | +* For both of these deficiencies, it is easy to define a custom |
| 118 | + routine to implement this, should it be needed prior to the library |
| 119 | + providing full support. |
| 120 | + |
| 121 | +* No attempt to search through the file and find missing chunks is |
| 122 | + made when a corrupt chunk table is encountered. However, if a |
| 123 | + particular chunk is corrupt, this is handled such that the other |
| 124 | + chunks may be read without rendering the context unusable |
| 125 | + |
| 126 | +Merged Pull Requests: |
| 127 | + |
| 128 | +* [1097](https://github.com/AcademySoftwareFoundation/openexr/pull/1097) Include exported OpenEXR headers with "" instead of <> |
| 129 | +* [1092](https://github.com/AcademySoftwareFoundation/openexr/pull/1092) Document current standard optional attributes |
| 130 | +* [1088](https://github.com/AcademySoftwareFoundation/openexr/pull/1088) First draft of rst/readthedocs for C API/OpenEXRCore |
| 131 | +* [1087](https://github.com/AcademySoftwareFoundation/openexr/pull/1087) Edit doxygen comments for consistency and style |
| 132 | +* [1086](https://github.com/AcademySoftwareFoundation/openexr/pull/1086) Simplify names, improve error messages, fix imath usage in Core |
| 133 | +* [1077](https://github.com/AcademySoftwareFoundation/openexr/pull/1077) Initial doxygen/sphinx/breathe/readthedocs docs |
| 134 | +* [1076](https://github.com/AcademySoftwareFoundation/openexr/pull/1076) Refactor deep tests to separate file, fix deep chunk reads, ripmap reading |
| 135 | +* [1074](https://github.com/AcademySoftwareFoundation/openexr/pull/1074) Add utility function for ease of use in other libraries |
| 136 | +* [1073](https://github.com/AcademySoftwareFoundation/openexr/pull/1073) Use same struct scheme as box from imath for consistency |
| 137 | +* [1069](https://github.com/AcademySoftwareFoundation/openexr/pull/1069) Clean up library VERSION and SOVERSION |
| 138 | +* [1062](https://github.com/AcademySoftwareFoundation/openexr/pull/1062) Add missing "throw" before InputExc in IDManifest::init() |
| 139 | +* [1045](https://github.com/AcademySoftwareFoundation/openexr/pull/1045) Fix #1039 The vtable for TiledRgbaInputFile was not properly tagged |
| 140 | +* [1038](https://github.com/AcademySoftwareFoundation/openexr/pull/1038) fix/extend part number validation in MultiPart methods |
| 141 | +* [1024](https://github.com/AcademySoftwareFoundation/openexr/pull/1024) Remove dead code in ImfB44Compressor.cpp |
| 142 | +* [1020](https://github.com/AcademySoftwareFoundation/openexr/pull/1020) Fix comparison of integer expressions of different signedness warning |
| 143 | +* [870](https://github.com/AcademySoftwareFoundation/openexr/pull/870) WIP: New C core |
| 144 | + |
52 | 145 | ## Version 3.0.5 (July 1, 2021) |
53 | 146 |
|
54 | 147 | Patch release that fixes problems with library symlinks and |
|
0 commit comments