NVIDIA Texture Tools Exporter 2023.3.2 / NVTT 3.2.4 Released

I’m happy to announce that NVIDIA Texture Tools Exporter 2023.3.2 and NVTT 3.2.4 have been released!

This is primarily a security release. We’ve updated the Exporter’s version of the libwebp library (used to load and save WebP images) to fix CVE-2023-4863/CVE-2023-5129 (where a malicious .webp file could make the libwebp library execute arbitrary code; the NVTT library was not affected). We’ve also added a safer version of TimingContext::GetRecord() in NVTT. JPEG decoding is also more accurate now – you should see fewer block artifacts when loading high-contrast images than in 2023.3.1 or lower.

Here are the full release notes!

  • Fixed naming of NVTT_VERSION fields to make the mapping to semantic versioning clearer. For instance, NVTT 3.2.4 is fork 3, major version 2 (incremented on API breaks), minor version 4 (incremented on new features and bug fixes).

  • Added a safer 4-argument overload of TimingContext::GetRecord(), which takes the size of the buffer to write the description to, and deprecated the 3-argument version.

  • Exporter: Updated libwebp to fix CVE-2023-4863/CVE-2023-5129, in which a malicious .webp file could make the libwebp library execute arbitrary code. The Exporter used libwebp via FreeImage; the NVTT library does not use libwebp and was not affected.

  • Exporter: Fixed incorrect JPEG decoding due to FreeImage defaulting to an approximate inverse discrete cosine transform (IDCT) instead of a precise IDCT.

incorrect-dct-approx-2023-3-1 incorrect-dct-approx-2023-3-2

Left: A test JPEG loaded into Exporter 2023.3.1. Note the “blocking” or “low-quality JPEG” artifacts from the approximate inverse DCT, which show up as slightly brighter streaks on the gray background. Right: The same JPEG loaded into Exporter 2023.3.2. The new version uses an accurate inverse DCT, which removes these artifacts.

Thanks to Chris Hebert for finding this.

  • Exporter GUI: Changed the “Compression Quality” header to “Compression Effort” to clarify that higher effort makes compressors search through more blocks and usually take more time to produce better results. In other words, as effort increases, the quality of the output usually increases, but the file size remains the same.

  • Exporter: Now supports paths longer than 260 characters.

  • Exporter: The DDS writer now sets the DDPF_LUMINANCE flag for L8 textures.

If you spot any bugs in the new version, please don’t hesitate to contact us at texturetools@nvidia.com or in this forum. Thanks again!