Happy December! We have tagged "v2.3.10.0" as the latest supported production release, and updated the "release" branch marker to that point. This is API/ABI/link back-compatible with prior 2.3 releases.
This is an unusually large release for the stable branch! It's quite rare to have this many new features, but we just happened to have a lot of new things land in 'master' that were not compatibility-breaking and seemed low-risk to backport, and it seemed a shame to wait until summer for them to be in a supported release. I'll remind you that "master" is also totally production worthy (in the sense of being rock solid software), and in fact is used in demanding production at many places, but it does not guarantee API or ABI stability until it becomes a release branch next summer. Release 2.3.10 (1 Dec 2021) -- compared to 2.3.9 -------------------------------------------------- New (non-compatibility-breaking) features: * TextureSystem: add feature for stochastic mipmap interpolation. This adds new interpolation modes "StochasticTrilinear" and "StochasticAniso", which in conjunction with the "rnd" field in TextureOpt, will stochastically choose between bracketing MIPmap levels rather than interpolating them. This reduces texture lookup cost by up to 40%, but it's only useful in the context of a renderer that uses many samples per pixel. #3127 * maketx/make_texture() now supports options to store Gaussian forward and inverse transform lookup tables in image metadata (must be OpenEXR textures for this to work) to aid writing shaders that use histogram-preserving blending of texture tiling. This is controlled by new maketx arguments `--cdf`, `--cdfsigma`, `--sdfbits`, or for `IBA::make_texture()` by using hints `maketx:cdf`, `maketx:cdfsigma`, and `maketx:cdfbits`. #3159 * `oiitool --oiioattrib` can set "global" OIIO control attributes for an oiiotool run (equivalent of calling `OIIO::attribute()`). #3171 * `oiiotool --repremult` exposes the previously existing `IBA::repremult()`. The guidance here is that `--premult` should be used for one-time conversion of "unassociated alpha/unpremultiplied color" to associated/premultiplied, but when you are starting with a premultiplied image and have a sequence of unpremultiply, doing some adjustment in unpremultiplied space, then re-premultiplying, it's `--repremult` you want as the last step, because it preserves alpha = 0, color > 0 data without crushing it to black. #3192 * `oiiotool --saturate` and `IBA::saturate()` can adjust saturation level of a color image. #3190 * When building against OpenEXR >= 3.1.3, our OpenEXR output now supports specifying the zip compression level (for example, by passing the "compression" metadata as "zip:4"). Also note than when using OpenEXR >= 3.1.3, the default zip compression has been changed from 6 to 4, which writes compressed files significantly (tens of percent) faster, but only increases compressed file size by 1-2%. #3157 * Improved image dithering facilities: When dithering is chosen, it now happens any time you reduce >8 bits to <= 8 bits (not just when converting from float or half); change the dither pattern from hashed to blue noise, which looks MUCH better (beware slightly changed appearance); `IBA::noise()` and `oiiotool --noise` now take "blue" as a noise name, giving a blue noise pattern; `IBA::bluenoise_image()` returns a reference to a stored periodic blue noise iamge; `oiiotool -d` now lets you ask for "uint6", "uint4", "uint2", and "uint1" bit depths, for formats that support them. #3141 * New global OIIO attribute `"try_all_readers"` can be set to 0 if you want to override the default behavior and specifically NOT try any format readers that don't match the file extension of an input image (usually, it will try that one first, but it if fails to open the file, all known file readers will be tried in case the file is just misnamed, but sometimes you don't want it to do that). #3172 * Raise the default ImageCache default tile cache from 256MB to 1GB. This should improve performance for some operations involving large images or images with many channels. #3180 * IOProxy support has been added to JPEG output (already was supported for JPEG input) and for GIF input and output. #3181 #3182 * `oiiotool --maxchan` and `--minchan`, and `IBA::maxchan()` and `minchan()` turn an N-channel image into a 1-channel images that for each pixel, contains the maximum value in any channel of the original for that pixel. #3198 Bug fixes: * Fix `oiiotool --invert` to avoid losing the alpha channel values. #3191 * Fix excessive memory usage when saving EXR files with many channels. #3176 * WebP: Fix previous failure to properly set the "oiio:LoopCount" metadata for animated webp images. #3183 * Targa: Better detection/safety when reading corrupted files, and fixed bug when reading x-flipped images. #3162 * RLA: better guards against malformed input. #3163 * Fix oiiotool bug when autocropping output images when the entire pixel data window is in the negative coordinate region. #3164 * oiiotool improved detection of file reading failures. #3165 * DDS: Don't set "texturetype" metadata, it should always have been only "textureformat". Also, add unit testing of DDS to the testsuite. #3200 * When textures are created with the "monochrome-detect" feature enabled, which turns RGB textures where all channels are always equal into true single channel greyscale, the single channel that results is now correctly named "Y" instead of leaving it as "R" (it's not red, it's luminance). #3205 Build fixes and developer goodies: * Update internal stb_printf implementation (avoids some sanitizer alerts). #3160 * Fixes for MSVS compile. #3168 * Add Cuda host/device decorations to TypeDesc methods to make them GPU friendly. #3188 * TypeDesc: The constructor from a string now accepts "box2f" and "box3f" as synonyms for "box2" and "box3", respectively. #3183 * New Strutil::parse_values, scan_values, scan_datetime, parse_line. #3173 #3177 * New `Filesystem::write_binary_file()` utility function. #3199 * New build option `-DTIME_COMMANDS=ON` will print time to compile each module (for investigating build performance; only useful when building with `CMAKE_BUILD_PARALLEL_LEVEL=1`). #3194 -- Larry Gritz l...@larrygritz.com _______________________________________________ Oiio-dev mailing list Oiio-dev@lists.openimageio.org http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org