[Oiio-announce] OpenImageIO 1.7 release!

Larry Gritz lg at larrygritz.com
Sat Oct 1 11:24:03 PDT 2016

OpenImageIO 1.7 is now the official supported release. (No longer beta or release candidate.) Release notes are at the end of this message.

The new tag is Release-1.7.7, the "release" branch has been updated to point there. We promise that there will be no further additions to RB-1.7 that break backwards compatibility of APIs or linkage. We will continue to add bug fixes and low-risk non-API-breaking additions to the top of RB-1.7, with new official release tags approximately monthly.

Release 1.6 is now deprecated. We will still backport bug fixes, but generally only when requested. As time goes on, the threshold for how small and critical the bug fix must be will increase, and eventually no more changes will be made to 1.6.

Meanwhile, the "master" branch is a hotbed of new development, eventually to be 1.8. The software itself is solid, but we make no promises about API or ABI changes that can break compatibility within the master branch.

IMPORTANT NOTE about C++ standard and library compatibility:

* OIIO 1.7 can compile both with C++03 as well as C++11, supports Boost releases as old as 1.42, OpenEXR as old as 1.6. It can be compiled with gcc as old as 4.4 (maybe older), crazy old versions of clang, and MSVS 2012 (or maybe even earlier).

* OIIO 1.8 -- the current master -- will very soon require C++11 as a minimum, remove support for OpenEXR 1.x and Boost versions earlier than 1.50 (maybe 1.55, I haven't decided). It will require a minimum of gcc 4.8.2, clang 3.4, or MSVS 2015.

If you need to keep using older libraries, compilers, or C++ standard, please stick to something on the RB-1.7 branch, because master will soon not work for you. The 1.7 releases will never lose compatibility with those older libraries, and will continue to be actively supported through the majority of 2017.

Release 1.7 (1 Oct 2016) -- compared to 1.6.x
Major new features and improvements:
 * New oiiotool commands:
    * `-otex` and `-oenv` allow oiiotool to directly output proper texture
      maps, and it can now do everything that maketx can do. #1351 (1.7.2)
    * `--line` can draw polylines into an image. #1319 (1.7.1)
    * `--box` can draw a filled or unfilled box into an image. #1319 (1.7.1)
    * `--laplacian` computes the Laplacian. #1332 (1.7.1)
    * `--deep_merge` does a full merge/composite of deep images. #1388 (1.7.2)
    * `-i` inputs a file. Options `autocc=`, `now=`, `info=` control aspects
      of reading that one file. #1389 (1.7.2)
    * `--dilate` and `--erode` perform the basic morphological operations
      of dilation and erosion. #1486 (1.7.5)
 * New ImageBufAlgo functions: render_point(), render_line(), render_box()
   #1319 (1.7.1); laplacian() #1332 (1.7.2); copy() #1388 (1.7.2);
   deep_merge() #1388,1393 (1.7.2); dilate() and erode() (1.7.5).
 * UDIM support for textures: filenames like `"tex_<UDIM>.exr"` will
   automatically be resolved to the correct UTIM tile based on the s,t
   coordinates. #1426 (1.7.3)
 * Behavior change: When reading files without explicit channel names,
   single channel images now name their channel "Y" (no longer "A",
   which was confusing to algorithms that treat alpha in special ways).
   Similarly, 2-channel images name their channels "R" and "G". #1434 (1.7.3)

Public API changes:
 * DeepData internals and API overhaul: struct internals hidden, now you
   must use the API; DeepData declaration is now in deepdata.h, not in
   imageio.h; DD methods now allow insertion and erasure of individual
   samples. #1289 (1.7.0) New DeepData methods: split, sort, merge_overlaps,
   merge_deep_pixels, occlusion_cull. #1388,1393 (1.7.2)
 * imageio.h: Removed items deprecated since 1.4: a version of convert_types()
   that took alpha and z channel indices (but never used them). #1291
 * fmath.h: Removed safe_sqrtf, safe_acosf, fast_expf, which have been
   deprecated since 1.5. (1.7.0) #1291
 * Removed ImageBufAlgo::flipflop(), which was deprecated since 1.5 and
   is now called rotate180. #1291 (1.7.0)
 * Several varieties of ImageCache and TextureSystem getattribute methods
   were noticed to not be properly declared 'const'. This was fixed.
   #1300 (1.7.0/1.6.9)
 * For API calls that are deprecated but not yet removed, we now mark
   them with deprecated attributes for compilers that support it,
   meaning that you will get compile warnings and explanations when you
   use deprecated OIIO API functions. #1313,#1318 (1.7.1)
 * ImageBuf::contains_roi() reveals whether an ROI is completely contained
   in the data region of the IB. #1310 (1.7.1)
 * TypeDesc::is_signed() return true of the TypeDesc returns a type that
   can represent negative values. #1320
 * Python: improve: reading with request for type UNKNOWN returns native
   data in an unsigned char array. Also, requesting HALF returns the half
   bits in an unsigned short array (since there is no 'half' type in Python).
   #1362 (1.7.2/1.6.11)
 * Deprecate ImageCache/TextureSystem clear() methods, which never did
   anything useful. #1347 (1.7.3)
 * ImageSpec::set_format() clears any per-channel format information. #1446
 * OIIO::getattribute("library_list", ...) can retrieve a list of all the
   dependent libraries used when OIIO was built. #1458 (1.7.5)
 * simd::mask4 class has been renamed simd::bool4 (though the old name
   is still typedef'ed to work for now). #1484 (1.7.5)
 * Python bindings for ImageBuf.reset() now properly understands the
   argument names and default values. #1492 (1.7.6)

Fixes, minor enhancements, and performance improvements:
 * oiiotool:
    * oiiotool --subimage now takes as an argument either the subimage
      numeric index, or a subimage name. #1287 (1.7.0)
    * oiiotool's image cache was smaller than intended because of typo.
    * Allow command-line expression metadata names to contain ':'. #1321
    * --info more clearly prints info about subimage formats. #1320 (1.7.1)
    * --ch: when the channels were only renamed, not reordered, the
      renaming didn't happen properly. #1326 (1.7.1/1.6.10)
    * Improved error message propagation from the underlying IBA functions
      and from errors encounered during --stats. #1338 (1.7.2)
    * --dumpdata:empty=0 now does something for non-deep files: skips
      reporting of pixels where all channels are black. Also fixed errors
      for dumpdata of deep, but non-float, files. #1355 (1.7.2/1.6.11)
    * '--attrib:type=t name value' lets you explicitly name the top of
      the attribute you're seting. This helps for ambiguous cases, and also
      lets you create aggregate types (such as 'matrix' or 'int[2]' --
      the value can be a comma-separated list in those cases). #1351 (1.7.2)
    * --fixnan can now take option "error", meaning that upon finding a
      NaN, the program considers it an error (rather than fixing).
      #1351 (1.7.2)
    * -o now takes optional arguments that control the output of just that
      one file, including :datatype=, :bits=, :dither=, :autocc=,
      :autocrop=, :autotrim=, :separate=, :contig=.  #1351 (1.7.2)
    * --resize and --fit sped up by approximately 2x. #1372 (1.7.2)
    * --runstats not tracks and reports max memory usage. #1385 (1.7.2)
    * New --cache and --autotile options let you set the ImageCache size and
      autotile options. #1385 (1.7.2)
    * --native results in slightly different behavior: does not force float,
      but still uses the ImageCache as backing if the native data type
      is one of the types directly supported by IC. #1385 (1.7.2)
    * --fixnan now works with deep images. #1397 (1.7.3)
    * --stats when used with deep images, if it encounters any nonfinite
      values, will print the location of a representative one. #1397 (1.7.3)
    * --add, --sub, and --absdiff, when its two image operands have differing
      number of channels, now try to do the "correct" thing and have the
      result have the larger number of channels, treating any "missing"
      channels in either input as if they were 0-valued. #1402 (1.7.3)
    * --attrib:type-timecode lets you set timecodes in "human-readable" form:
        oiiotool in.exr -attrib:type=timecode TimeCode 11:34:03:00 -o out.exr
      #1415 (1.7.3)
    * -info -v will print timecodes in human-readable form. #1415 (1.7.3)
    * Bug fix: --fullsize didn't work properly when followed by --attrib.
      #1418 (1.7.3/1.6.14)
    * Easily understandable warnings for common mistakes: no output specified,
      an image that's modified but never output, or when -autocc causes
      output to be a data format that overrides a previous -d directive.
      #1419 (1.7.3)
    * --origin, --croptofull, and --trim all do their thing to all subimages,
      if the image at the top of the stack has multiple subimages.
      #1440 (1.7.3)
    * --crop operates on all subimages if either the -a flag was used, or
      if the specific optinoal override `--crop:allsubimages=1` is used.
      #1440 (1.7.3)
    * --trim will trim all subimages to the same region, containing the
      union of all nonzero pixels in all subimages. #1440 (1.7.3)
    * --help now prints all of the dependent libraries for individual
      formats. #1458 (1.7.5)
    * Bug fix: make sure to propagate per-channel formats from input
      to output. #1491 (1.7.6)
    * -o:all=n will output all images currently on the stack, and the
      filename argument will be assumed to be a pattern containing a %d,
      which will be substituted with the index of the image (beginning with
      n). For example, to take a multi-image TIFF and extract all the
      subimages separately,
          oiiotool multi.tif -sisplit -o:all=1 sub%04d.tif
      will output the subimges as sub0001.tif, sub0002.tif, and so on.
      #1494 (1.7.6)
    * --mosaic MxN would fail mysteriously if the number of images on the
      stack was less then M*N. This has been fixed to handle too-few images
      gracefully and just leave blank spaces as needed. #1501 (1.7.7)
 * ImageBuf:
    * ImageBuf::iterator performance is improved -- roughly cutting in half
      the overhead of iterating over pixels. #1308 (1.7.1/1.6.10)
    * ImageBuf reads from disk have been improved substantially (in some
      cases cutting read time in half) in many cases. #1328 (1.7.1)
    * ImageBuf::copy_pixels() has been sped up. #1358 (1.7.2)
 * ImageBufAlgo:
    * The varieties of add(), sub(), mul(), and div() that take an
      image operand and a per-channel constant operand have all been
      modified to work properly for "deep" images. #1297 (1.7.0/1.6.10)
    * mad() is sped up significantly (10x) for the common case of float
      images already stored in memory (not cached). #1310 (1.6.1)
    * render_point(), render_line(), render_box() can be used to render
      points, lines, and boxes into an image. #1319 (1.7.1)
    * channels(): when the channels were only renamed, not reordered,
      the renaming didn't happen properly. #1326 (1.7.1/1.6.10)
    * computePixelStats: Improved numerical accuracy to avoid getting
      NaN values from imprecision. #1333 (1.7.2/1.6.11)
    * laplacian() computes the laplacian of an image. #1332 (1.7.2)
    * fixNonFinite() takes a new option: NONFINITE_ERROR, which will
      return an error if nonfinite values are encountered. #1351 (1.7.2)
    * convolve() and unsharp_mask() have been sped up by about 35% for
      common cases. #1357 (1.7.2)
    * IBA::resize sped up by approximately 2x. #1372 (1.7.2)
    * IBA::fixNonFinite() now works with deep images. #1397 (1.7.3)
    * dilate() and erode() perform basic morphological operations.
      #1486 (1.7.5)
 * ImageCache / TextureSystem:
    * Less unnecessary pausing after read errors when falure_retries == 0.
      #1336 (1.7.2/1.6.11)
    * Texture: slight improvement in texture sharpness. #1369 (1.7.2/1.6.11)
    * New statistics related to redundant tile reads. #1417 (1.7.3)
    * TextureSystem option "flip_t", if nonzero, will flip the vertical
      direction of all texture lookups. Use this for renderers that adhere
      to the convention that the t=0 texture coordinate is the visible
      "bottom" of the texture. #1428 (1.7.3) #1462 (1.7.5)
    * UDIM support for textures: filenames like `"tex_<UDIM>.exr"` will
      automatically be resolved to the correct UTIM tile based on the
      s,t coordinates. #1426 (1.7.3)
    * Avoid repeated broken texture error messages. #1423 (1.7.3)
    * New IC/TS attribute: "max_errors_per_file" limits how many error
      messages are printed for each file. #1423 (1.7.3)
    * Improved statistics: for the "top 3" stats, print the top 3 that aren't
      broken. Also print a count & list of broken/invalid files. #1433
    * Add ability to retrieve various per-file statistics. #1438 (1.7.3/1.6.15)
    * IC will clamp the max_open_files to the maximum allowed by the
      system, so you can no longer crash a program by incorrectly
      setting this limit too high. #1457 (1.7.5)
    * IC/TS statistics now report separately the total size of images
      referenced, in terms of in-cache data size, as well as on-disk
      size (the latter may be compressed). #1481 (1.7.5)
 * maketx:
    * maketx -u now remakes the file if command line arguments or OIIO
      version changes, even if the files' dates appear to match.
      #1281 (1.7.0)
    * Remove long-obsolete and non-functional command line options: --new,
      --old, --hash. #1351 (1.7.2)
 * iinfo:
    * More clearly prints info about subimage formats. #1320 (1.7.1)
    * Print timecodes in human-readable form. #1415 (1.7.3)
 * ImageOutput: fix cases with native data but non-contiguous strides.
   #1416 (1.7.3/1.6.15)
 * Cineon:
    * Improved deduction/setting of color space info. #1466 (1.7.5)
 * GIF:
    * GIF reader failed to set spec full_width, full_height. #1348
 * JPEG:
    * Fix bad memory access crash when reading specific JPEG files that were
      written without their comment field including a null character to
      end the string. #1365 (1.7.2/1.6.11)
    * Change in behavior writing JPEG files when XResolution & YResolution
      are not provided, but a PixelAspectRatio is requested. Previously, we
      obeyed the JPEG/JFIF spec exactly, but it turns out that popular apps
      including PhotoShop and Nuke use the field differently than the spec
      dictates. So now we conform to how these apps work, rather than to
      the letter of the spec. #1412 (1.7.3/1.6.15)
 * OpenEXR:
    * Fix broken multipart output when parts had different pixel data
      types. #1306,#1316 (1.7.1/1.6.10)
    * Improved error reporting for bad tile reads. #1338 (1.7.2/1.6.11)
    * Fix errors reading tiles for mixed-format EXR files. #1352 (1.7.2/1.6.11)
    * The global OIIO::attribute("exr_threads") has been modified so that 0
      means to use full available hardware, -1 disables the OpenEXR
      thread pool and execute in the caller thread. #1381 (1.7.2)
    * When writing EXR, double check that there are no repeated channel
      names, and if so, rename them so the data is not lost (since the
      underlying libIlmImf will silently drop channels with repeated
      names).  #1435 (1.7.3)
    * More robust detected of when OpenEXR is tiled (for weird files).
      #1441 (1.7.3/1.6.15) (and a fix in #1448/1.7.4)
    * Fixed minor bug with OpenEXR output with correctly setting
      PixelAspectRatio based on the "XResolution" and "YResolution"
      attributes. #1453 (Fixes #1214) (1.7.4/1.6.16)
    * Fix setting "chromaticity" metadata in EXR files. #1487 (1.7.5)
    * When writing OpenEXR, accept compression requests with quality numbers
      appended to the compression algorithm name, such as "dwaa:200" to mean
      dwaa compression with a dwaCompressionLevel set to 200. #1493 (1.7.6)
 * PNG:
    * Per the PNG spec, name 2-channel images Y,A. #1435 (1.7.3)
    * Enforce that alpha premultiplication on output MUST consider alpha
      to be the last channel of 2 or 4 channel images, no other cases
      (as dictated by the PNG spec). #1435 (1.7.3)
 * PNM:
    * Fixed byte swapping when reading 16 but PNM files. #1352 (1.7.2/1.6.11)
 * RAW:
    * Changes to how we instruct libraw to process images when reading:
      Now, by default, auto-bright adjustment is off, camera white
      balance is on, and maximum threshoding is set to 0. There are
      "open with config" overrides for all of these, for anybody who
      doesn't like the default. #1490 (1.7.6)
 * RLA:
    * Fixes for both reading and writing of RLA images that are cropped
      (i.e., data window is a subset of display window). #1224 (1.7.0/1.6.10)
 * TIFF:
    * When outputting a TIFF file, a special attribute "tiff:half", if
      set to nonzero, will enable writing of 16-bit float pixel data
      (obviously, only if the spec.format is HALF). #1283 (1.7.0)
    * TIFF input: erase redundant IPTC:Caption and IPTC:OriginatingProgram
      if they are identical to existing ImageDescription and Software
      metadata, respectively. (1.7.0/1.6.9)
    * Output: "tiff:zipquality" attribute controls time-vs-quality for
      ZIP compression (1-9, defualt 6, higher means more compression).
      #1295 (1.7.1)
    * Fix typo that made TIFF files incorrectly name color space metadata
      "oiio::ColorSpace" instead of "oiio:ColorSpace". #1394 (1.7.2)
    * More robust handling of non-zero origin of full/display window.
      #1414 (1.6.14/1.7.3)
 * Video formats:
    * The ffmpeg-based reader had a variety of fixes. #1288 (1.7.0)
    * Support for reading 10-bit and 12-bit movies. #1430 (1.7.5)
 * Improved accuracy of "lanczos3" filter; speed up blackman-harris filter.
   #1379 (1.7.2)
 * Speed up linear<->sRGB color conversions (as used by any of the IBA color
   conversion functions as well as oiiotool --colorconvert and friends),
   approximately doubling the speed when no OpenColorIO config is found.
   #1383 (1.7.2)
 * ImageInput::create() and ImageOutput::create() will now gracefully
   handle unexpected exceptions inside an ImageInput or ImageOutput
   constructor -- return an error rather than crashing.  #1456 (1.7.4/1.6.16)
 * Nuke txWriter adds UI to let you choose which type of texture you are
   building (ordinary 2D texture, latlong env map, etc). #1488 (1.7.6)

Build/test system improvements:
 * Default build is now C++11! #1344 (1.7.2) You can still (for now) build
   for C++03 using 'make USE_CPP11=0' or 'cmake -DOIIO_BUID_CPP11=0', but
   some time soon we will be C++11 minimum.
 * Fix build break against Boost 1.60. #1299,#1300 (1.7.0/1.6.9/1.5.23)
 * filesystem_test now much more comprehensively tests the contents of
   Filesystem. #1302 (1.7.0)
 * fmath_test adds benchmarks for various data conversions. #1305 (1.7.0)
 * Travis: add DEBUG builds to the matrix to fix any warnings or failures
   that only show up for DEBUG builds. #1309 (1.7.1/1.6.10)
 * Fix build issues on some platforms for SHA1.h, by adding proper include
   of `<climits>`. #1298,#1311,#1312 (1.7.1/1.6.10)
 * Cleanup of include logic in simd.h that fixed build problems for gcc < 4.4.
   #1314 (1.7.1/1.6.10)
 * Fix build breaks for certain 32 bit platforms. #1315,#1322 (1.7.1/1.6.10)
 * imagespeed_test can not specify the data conversion type for reads,
   can optionally allow skipping the IB iteration tests, and can set the
   IC tile cache size. #1323 (1.7.1)
 * Fix build breaks for gcc 6. #1339 (1.7.2/1.6.11) #1436 (1.7.3/1.6.15)
 * Fix errors in finding the correct locaiton of pugixml.hpp when using
   USE_EXTERNAL_PUGIXML=1. #1339 (1.7.2/1.6.11)
 * Rewrite of FindOpenEXR.cmake. Solves many problems and is simpler.
   No more FindIlmbase.cmake at all. #1346 (1.7.2/1.6.11)
 * 'make CODECOV=1; make CODECOV=1 test' can build and test in a way that
   provides a code coverage report. #1356 (1.7.2)
 * Fix Filesystem::open() issues with UTF-8 filenames on MinGW.
   #1353,#1357 (1.7.2/1.6.11)
 * Allow build against a wider range of ffmpeg versions. #1359 (1.7.2)
 * Build correctly against FFMPEG 3.0. #1374 (1.7.2)
 * If found, libjpeg-turbo is used rather than libjpeg; this gives about a
   2x speed improvement for reading & writing JPEG files. #1390 (1.7.2/1.6.13)
 * USE_CPP11=... and USE_CPP14=... are the build flags for both the Make
   wrapper and the CMake scripts. (Before, it was confusing to have USE_CPP11
   for make but OIIO_BUILD_CPP11 for CMake. Now they are one.) #1391 (1.7.2)
 * Improved LINKSTATIC=1, now mostly works. #1395 (1.7.3)
 * Big CMake refactor, got rid of redundancies. #1395 (1.7.3)
 * Remove old embedded Ptex, now must find Ptex externally. Also modified
   the build scripts to correctly handle newer versions of Ptex. #1400
 * Got Appveyor building OIIO. This is a continuous integration service
   much like Travis, but it's for Windows. Hopefully this means that it will
   be much harder for us to make changes that inadvertently break the build
   on Windows. #1399 (1.7.3)
 * Make FindOpenEXR.cmake more robust when the version number is embedded
   in the library name. #1401 (1.7.3/1.6.15)
 * Clear up some inconsistencies in the CMake files and the Makefile wrapper:
   the flag to compile with libc++ is now always called USE_LIBCPLUSPLUS,
   not sometimes OIIO_BUILD_LIBCPLUSPLUS. #1404 (1.7.3)
 * Overhaul OpenCV dependency finding and make it work with OpenCV 3.x.
   #1409 (1.7.3/1.6.13)
 * Allow custom JPEG_PATH to hint location of JPEG library. #1411
 * Windows UTF-8 filename safety fixes. #1420 (1.7.3/1.6.14)
 * Various Windows compilation & warning fixes. #1443 (1.7.3/1.6.15)
 * Now builds correctly against OpenJPEG 2.x, it previously only supported
   OpenJPEG 1.x. #1452  (Fixes #957, #1449) (1.7.4/1.6.16)
 * Fix Filesystem::searchpath_find on Windows with UTF-8 paths.
   #1469 (
 * Improved the way OpenEXR installations are found. #1464 (1.7.5)

Developer goodies / internals:
 * thread.h has had all the atomic operations split into a separate atomic.h.
   #1443 (1.7.3)
 * atomic.h: add atomic and, or, and xor. #1417 (1.7.2/1.6.14);
 * parallel_image has been improved in several ways: can choose split
   direction; raised minimum chunk size to prevent thread fan-out for
   images too small to benefit; uses the calling thread as part of the
   pool. #1303 (1.7.0)
 * timer.h: DoNotOptimize() and clobber_all_memory() help to disable certain
   optimizations that would interfere with micro-benchmarks. #1305 (1.7.0)
 * simd.h improvements: select(); round(); float4::store(half*),
   int4::store(unsigned short*), int4::store(unsigned char*). #1305 (1.7.0)
   Define insert, extract, and ^ (xor), and ~ (bit complement) for mask4,
   and add ~ for int4. #1331 (1.7.2); madd, msub, nmadd, nmsub, rint,
   andnot #1377 (1.7.2); exp, log #1384 (1.7.2); simd::float3 is like float4,
   but only loads and stores 3 components, it's a good Vec3f replacement (but
   padded) #1473 (1.7.5); matrix44 4x4 matrix class #1473 (1.7.5);
   mask4 renamed to bool4, and addition of float8, int8, bool8 classes
   for 8-wide AVX/AVX2 SIMD #1484 (1.7.5).
 * fmath.h: convert_types has new special cases that vastly speed up
   float <-> uint16, uint8, and half buffer conversions #1305 (1.7.0);
   ifloor (1.7.2); SIMD versions of fast_log2, fast_log, fast_exp2,
   fast_exp, fast_pow_pos #1384 (1.7.2); fix sign of expm1 for small
   arguments #1482 (1.7.5); added fast_log1p #1483 (1.75).
 * Fix pesky precision discrepancy in internal convert_type<> that used
   slightly different math when converting one value at a time, versus
   converting whole arrays. #1350 (1.7.2)
 * thread.h: add mutex_pool #1425 (1.7.3/1.6.15)
 * compute_test: new unit test can be used to benchmark computation
   times. #1310 (1.7.1)
 * filesystem.h: Filesystem::file_size() returns file size in bytes;
   Filesystem::read_bytes() reads the first n (or all) bytes from a file
   into a buffer. #1451 (1.7.4/1.6.16)
 * strutil.h: Strutil::extract_from_list_string is more flixible by
   allowing the vals list to start empty, in which case it will add as
   many values as it finds rather than only replacing existing
   values #1319 (1.7.1); Strutil::replace #1422 (1.7.3/1.6.15);
   utf_to_unicode now takes a string_view rather than a std::string&
   #1450 (1.7.4); add Strutil::base64_encode() #1450 (1.7.4).
 * sysutil.h: Sysutil::getenv() safely gets an env variable as a string_view
   #1451 (1.7.4/1.6.16); terminal_columns() now has a correct implementation
   on Windows #1460 (1.7.5); max_open_files() retrieves the maximum number
   of files the process may open simultaneously #1457 (1.7.5).
 * platform.h: better distinguishing beteen Apple and Generic clang,
   separately set OIIO_CLANG_VERSION and OIIO_APPLE_CLANG_VERSION. Also change
   OIIO_GNUC_VERSION to 0 for clang, only nonzero for true gcc. #1380 (1.7.2)
 * ImageCache: remove unused shadow matrix fields, save space. #1424 (1.7.3)
 * Many documentation files (such as README, CHANGES, LICENSE, CREDITS,
   and INSTALL) have been changed from plain text to MarkDown. #1442 (1.7.3)
 * Sysutil::Term class makes it easy to use color output on the terminal.
   #1479 (1.7.5)

Larry Gritz
lg at larrygritz.com

More information about the oiio-announce mailing list