Extended DDS File Support
This release updates DDS loading to support modern (well, more modern) dds files with the dx10 header as well as many more pixel formats. Some formats are only available with the header, and some legacy formats are only available with legacy dds files (no header). The full list of formats supported for loading in this release is:
- BC1 (DXT1 and DXT1A / Legacy and Modern)
- BC2 (DXT2 and DXT3 / Legacy and Modern)
- BC3 (DXT4 and DXT5 / Legacy and Modern)
- BC4 (ATI1 / Legacy and Modern)
- BC5 (ATI2 / Legacy and Modern)
- BC6s (HDR. Modern)
- BC6u (HDR. Modern)
- BC7 (Modern)
- A8 (Legacy and Modern)
- L8 (Legacy and Modern/R8)
- B8G8R8 (Legacy)
- B8G8R8A8 (Legacy and Modern)
- B5G6R5 (Legacy and Modern)
- B4G4R4A4 (Legacy and Modern)
- B5G5R5A1 (Legacy and Modern)
- R16f (HDR. Legacy and Modern)
- R16G16f (HDR. Legacy and Modern)
- R16G16B16A16f (HDR. Legacy and Modern)
- R32f (HDR. Legacy and Modern)
- R32G32f (HDR. Legacy and Modern)
- R32G32B32A32f (HDR. Legacy and Modern)
This is a superset of the possible export types provided by NVidia Texture Tools Exporter, but a sub-set of the possible types supported by Microsoft's DirectXTex texconv command-line tool. The heavy-lifting for decoding the BC formats was provided by https://github.com/iOrange/bcdec. This has also simplified the viewer code a little as before the decode was done by the GPU. It's a step forward to do it on the CPU since driver support for GPU-decode while generating thumbnails on separate threads with separate contexts was a little suspect (especially for Linux/Wayland).
Addition Improvements And Fixes
- Contact sheet generation filters and edge modes are now chosen separately from other resample filters. The contact sheet filter used on individual frames and the final output filter are now distinct. The UI will only display the filtering options if they will be used -- if you pre-author all the correct sizes, no filtering will be needed.
- Fixed a slight display problem with UV clamping when not displaying in tiled mode.
- Fixed issue with selecting mipmap filter in prefs. None (disable mipmapping) was unavailable from the combo-box.
- Fixed cursor move issue where sometimes shift-arrow would not update cursor position.
- Improved when decision to draw cursor as a square outline vs a reticle. It is now based on screen-space pixels rather than zoom amount.
- Improved cursor colour choice decision. It now takes intensity/alpha into account rather than only the Value in HSV-space.
- Zoom amount now stored per-image instead of globally. You can now flip between different images and they remember their zoom (if zoom mode is 'user').
- Spread-luminance option in preferences. Makes single-channel luminance images display as greyscale.