KTX Software Versions Save

KTX (Khronos Texture) Library and Tools

v4.3.2

3 months ago

New Features in Version 4.3

Command Line Tools Suite

v4.3 contains a new suite of command line tools accessed via an umbrella ktx command.

Tool Description Equivalent old tool
ktx create Create a KTX2 file from various input files toktx
ktx extract Export selected images from a KTX2 file -
ktx encode Encode a KTX2 file to a Basis Universal format ktxsc
ktx transcode Transcode a KTX2 file -
ktx info Prints information about a KTX2 file ktxinfo
ktx validate Validate a KTX2 file ktx2check
ktx help Display help information about the ktx tools -

Equivalent old tools will be removed in a subsequent release soon.

Some features of the old tools are not currently available in the new equivalent.

Old Tool New Tool Missing Features
toktx create JPEG and NBPM input and scaling/resizing of input images.
ktxsc encode ASTC encoding of a KTX2 file. This can be done in create.
Deflation of a KTX2 file with zlib or zstd.

The command-line syntax and semantics differ from the old tools including, but not limited to:

  • KTX 1.0 files are not supported by the new tools.

  • Words in multi-word option names are connected with - instead of _.

  • Individual option names may differ between the old and new tools.

  • The ktx validate tool may be stricter than ktx2check or otherwise differ in behavior, as the new tool enforces all rules of the KTX 2.0 specification. In addition, all new tools that accept KTX 2.0 files as input will be validated in a similar fashion as they would be with the ktx validate tool and will fail on the first specification rule violation, if there is one. It also has the option to output the validation results in human readable text format or in JSON format (both formatted and minified options are available), as controlled by the --format command-line option.

  • The ktx validate tool also supports validating KTX 2.0 files against the additional restrictions defined by the KHR_texture_basisu extension. Use the --gltf-basisu command-line option to verify glTF and WebGL compatibility.

  • The new ktx info tool produces a unified and complete output of all metadata in KTX 2.0 files and can provide output in human readable text format or in JSON format (both formatted and minified options are available), as controlled by the --format command-line option.

  • The source repository also includes the JSON schemas that the JSON outputs of the ktx info and ktx validate tools comply to.

  • The ktx create tool takes an explicit Vulkan format argument (--format) instead of inferring the format based on the provided input files as toktx, and thus doesn't perform any implicit color-space conversions except gamma 2.2 to sRGB. Use the --assign-oetf, --convert-oetf, --assign-primaries, and the new --convert-primaries for fine grained control over color-space interpretation and conversion.

  • The ktx create tool does not support resizing or scaling like toktx, and, in general, does not perform any image transformations except the optional color-space conversion and mipmap generation options. Users should resize input images to the appropriate resolution before converting them to KTX 2.0 files.

  • The ktx create and ktx extract tools consume and produce, respectively, image file formats that best suit the used Vulkan format. In general, barring special cases, 8-bit and 16-bit normalized integer formats are imported from and exported to PNG files, while integer and floating point formats are imported from and exported to EXR files based on predefined rules. This may be extended in the future using additional command line options and in response to support for other image file formats.

  • The new tools and updated libktx support ZLIB supercompression besides the BasisLZ and Zstd supercompression schemes supported previously.

Please refer to the manual pages or use the --help command-line option for further details on the options available and associated semantics for each individual command.

Thanks to @aqnuep and @VaderY of RasterGrid for their excellent work on the new tool suite.

Python Binding

A Python binding for libktx has been added. Applications written in Python can now use libktx functions. The package can be installed via pip install pyktx[==4.3.0]. Huge thanks to @ShukantPal.

Notable Changes since v4.3.1

  • The ktx tool suite and libktx have been made compliant with Revision 3 of the KTX v2 specification:
    • typeSize for formats with _mPACKxx suffix has been fixed. It is now xx/8.
    • YCbCr 2-plane 4:4:4 formats recently added to Vulkan have been prohibited.
    • A8B8G8R8_PACK32 and R16G16_S10_5_NV formats are now allowed.

Notable Changes in v4.3

  • libktx has been made much more robust to errors in KTX files.
  • libktx now validates checksums when present in a Zstd data stream.
  • libktx has two new error codes it can return: KTX_DECOMPRESS_LENGTH_ERROR and KTX_DECOMPRESS_CHECKSUM_ERROR.
  • All tools and libktx now correctly process on all platforms utf8 file names with multi-byte code-points. Previously such names did not work on Windows.
  • The Vulkan texture uploader can now optionally be used with an extenal memory allocator such as VulkanMemoryAllocator.

Known Issues

  • Some image bits in output files encoded to ASTC, ETC1S/Basis-LZ or UASTC on arm64 devices may differ from those encoded from the same input images on x86_64 devices. The differences will not be human visible and will only show up in bit-exact comparisons.

  • Users making Basis Universal encoded or GPU block compressed textures for WebGL must be aware of WebGL restrictions with regard to texture size and may need to resize input images appropriately before using the ktx create tool, or use the --resize feature of the old toktx tool to produce an appropriately sized texture. In general, the dimensions of block compressed textures must be a multiple of the block size in WebGL and for WebGL 1.0 textures must have power-of-two dimensions. Additional portability restrictions apply for glTF per the KHR_texture_basisu extension which can be verified using the --gltf-basisu command-line option of the new ktx validate tool.

  • Basis Universal encoding results (both ETC1S/LZ and UASTC) are non-deterministic across platforms. Results are valid but level sizes and data will differ slightly. See issue #60 in the basis_universal repository.

  • UASTC RDO results differ from run to run unless multi-threading or RDO multi-threading is disabled. In toktx use --threads 1 for the former or --uastc_rdo_m for the latter. As with the preceeding issue results are valid but level sizes will differ slightly. See issue #151 in the basis_universal repository.

  • Neither the Vulkan nor GL loaders support depth/stencil textures.

Changes since v4.3.1 (by part)

libktx

  • Flesh out support for VK_FORMAT_R16G16_S10_5_NV. (#864) (42dfae5cf) (@MarkCallow)

  • Allow A8B8G8R8 formats. (#861) (5ac5cf126) (@MarkCallow)

  • Fix recreateBytesPlane0 and add test (#856) (83b6386df) (@MarkCallow)

  • Fix mPACKn formats (#858) (dacd9934e) (@aqnuep)

  • Prevent warning if VK_NO_PROTOTYPES is already defined (#855) (d2d63f0aa) (@jherico)

Tools

  • Allow A8B8G8R8 formats. (#861) (5ac5cf126) (@MarkCallow)

  • Fix mPACKn formats (#858) (dacd9934e) (@aqnuep)

Java Wrapper

  • Allow A8B8G8R8 formats. (#861) (5ac5cf126) (@MarkCallow)

Version 4.3.1

Changes since v4.3.0 (by part)

Tools

  • Fix lingering KTXwriterScParams metadata from encode/transcode inputs (#852) (d3010bdc8) (@aqnuep)

Version 4.3.0

Changes since v4.3.0-beta1 (by part)

libktx

  • Rename branch to match upstream. (aaba10479) (@MarkCallow)

  • Add option to enable mkvk targets (VkFormat-related file generation). (#840) (e77a5316f) (@MarkCallow)

Tools

  • Report error on excess filenames (#843) (c32d99a08) (@aqnuep)

  • Fix error message typo (#837) (7dedd7e60) (@aqnuep)

  • Fix creating 3D textures and add KTXwriterScParams support to transcode (#833) (01d220c36) (@aqnuep)

  • Move buffer size check to base class. (dab91cf8e) (@MarkCallow)

Version 4.3.0-beta1

Changes since v4.3.0-alpha3 (by part)

libktx

  • git subrepo push lib/dfdutils (ab9c27707) (@MarkCallow)

  • Reenable build of loadtest apps on Windows arm64 CI (#802) (6c131f75f) (@MarkCallow)

  • Utf-8/unicode support in legacy tools and lib. (#800) (1c5dc9cf6) (@MarkCallow)

  • Do not redefine NOMINMAX (#801) (6dbb24643) (@corporateshark)

  • libktx: update ktxTexture2_setImageFromStream to allow setting the entire level's data in one call (#794) (88fc7a6e9) (@AlexRouSg)

  • Update dfdutils-included vulkan_core.h. (#783) (9c223d950) (@MarkCallow)

  • Support for A8 and A1B5G5R5 formats (#785) (eeac6206c) (@aqnuep)

  • Major non-content documentation fixes. (#773) (e6a6a3be9) (@MarkCallow)

  • Fix vendor-specific/tied memory property flag detection (#771) (a10021758) (@toomuchvoltage)

  • Return KTX_NOT_FOUND when a GPU proc is not found. (#770) (aeca5e695) (@MarkCallow)

  • Support for external allocators: (#748) (6856fdb0d) (@toomuchvoltage)

  • Fix ktx_strncasecmp (#741) (1ae04f897) (@VaderY)

  • Use correct counter for indexing sample. (#739) (3153e94e8) (@MarkCallow)

Tools

  • Disallow ASTC options when format is not ASTC (#809) (d3ef5ed8b) (@aqnuep)

  • Remove unnecessary nullptr checks. (#807) (072a4eb25) (@MarkCallow)

  • Set tools and tests rpath on Linux. (#804) (928612a71) (@MarkCallow)

  • Utf-8/unicode support in legacy tools and lib. (#800) (1c5dc9cf6) (@MarkCallow)

  • Support building of loadtest apps with locally installed dependencies (#799) (84ee59dd2) (@MarkCallow)

  • Update dfdutils-included vulkan_core.h. (#783) (9c223d950) (@MarkCallow)

  • Add UTF-8 filename support on Windows to ktxtools (#788) (7b6eab5dc) (@aqnuep)

  • Support for A8 and A1B5G5R5 formats (#785) (eeac6206c) (@aqnuep)

  • KTXwriterScParams support (#779) (f8691ff05) (@aqnuep)

  • Use -- in doc. to get -- not n-dash in output. (#767) (724790094) (@MarkCallow)

  • Document convert_primaries option in toktx. (#765) (3049f5b5e) (@MarkCallow)

  • Do target_type changes only in toktx (#757) (2cf053c19) (@MarkCallow)

  • Add support for fewer components in input files (#755) (adcccf152) (@aqnuep)

  • Fix --convert-primaries (#753) (e437ec45f) (@aqnuep)

  • Fix legacy app input from pipes on Windows. (#749) (3e7fd0af6) (@MarkCallow)

  • Improve output determinism and add internal ktxdiff tool for comparing test outputs (#745) (7f67af7e0) (@VaderY)

  • Add KTX_WERROR config option (#746) (dab32db90) (@MarkCallow)

  • Fix incorrect index calculations in image conversions (#735) (682f456de) (@VaderY)

  • Color-space and documentation related improvements for ktx create (#732) (8b12216f7) (@VaderY)

Java Wrapper

  • Update dfdutils-included vulkan_core.h. (#783) (9c223d950) (@MarkCallow)

Version 4.3.0-alpha3

Changes since v4.3.0-alpha2 (by part)

libktx

  • Improve documentation (#730) (69b1685a) (@MarkCallow)

    • Rework navigation among the multiple Doxygen projects for much easier use.
    • Rename new ktx tool man pages from ktxtools\_* to ktx\_*
    • Add ktx tool mainpage based on RELEASE_NOTES info.
    • Make minor formatting fix in ktx man page.
    • Update acknowledgements.
    • Remove outdated TODO.md.
    • Add script to do $Date$ keyword smudging. Use it in CI and reference it from README.md to avoid repetition of list of files needing smudging.
    • Add $Date$ keywords to some docs.
    • Remove $Date$ and #ident keywords that are no longer needed or used.
    • Document the parts of khr\_df.h relevant to the libktx API.
  • Implement the extended scope and further improvements for ktxtools (#722) (2189c54e) (@VaderY)

    • tools: Implement stdout support
    • tools: Implement stdin support
    • tools: Implement 4:2:2 support
    • tools: Implement support for 10X6 and 10X4 formats
    • tools: Implement support for B10G11R11_UFLOAT and E5B9G9R9_UFLOAT formats
    • tools: Complete support for Depth-Stencil formats
    • tools: Improvements, cleanup and bug fixes
    • extract: Implement fragment URI support
    • extract: Implement 4:2:2 sub-sampling
    • validate: Fix and extend padding byte validation checks
    • cts: Add support for stdin/stdout test cases (including binary IO)
    • cts: Add tests to cover new features and capabilities
    • cts: Extend existing tests to improve coverage
    • cts: Test runner now deletes matching output files (this enables easy packaging of mismatching files)
    • cts: Added a new cli arg to the runner script: --keep-matching-outputs to prevent the deletion of matching output files
    • dfdUtils: Implement 4:2:2 support
    • dfdUtils: Implement support for 10X6 and 10X4 formats
    • imageio: Fix stdin support
    • ktx: Add stringToVkFormat to mkvkformatfiles
    • ktx: Implement 3D BC support (ASTC 3D Blocks)
    • ktx: Implement 4:2:2 support
    • ktx: Complete support for Depth-Stencil formats
    • ktx: Improve interpretDFD
    • ktx: Improvements, cleanup and bug fixes
    • cmake: Add CMake generator expression for output directory on Mac

Tools

  • Improve documentation (#730) (69b1685a) (@MarkCallow)

    • Rework navigation among the multiple Doxygen projects for much easier use.
    • Rename new ktx tool man pages from ktxtools\_* to ktx\_*
    • Add ktx tool mainpage based on RELEASE_NOTES info.
    • Make minor formatting fix in ktx man page.
    • Update acknowledgements.
    • Remove outdated TODO.md.
    • Add script to do $Date$ keyword smudging. Use it in CI and reference it from README.md to avoid repetition of list of files needing smudging.
    • Add $Date$ keywords to some docs.
    • Remove $Date$ and #ident keywords that are no longer needed or used.
    • Document the parts of khr\_df.h relevant to the libktx API.
  • Implement the extended scope and further improvements for ktxtools (#722) (2189c54e) (@VaderY)

    • tools: Implement stdout support
    • tools: Implement stdin support
    • tools: Implement 4:2:2 support
    • tools: Implement support for 10X6 and 10X4 formats
    • tools: Implement support for B10G11R11_UFLOAT and E5B9G9R9_UFLOAT formats
    • tools: Complete support for Depth-Stencil formats
    • tools: Improvements, cleanup and bug fixes
    • extract: Implement fragment URI support
    • extract: Implement 4:2:2 sub-sampling
    • validate: Fix and extend padding byte validation checks
    • cts: Add support for stdin/stdout test cases (including binary IO)
    • cts: Add tests to cover new features and capabilities
    • cts: Extend existing tests to improve coverage
    • cts: Test runner now deletes matching output files (this enables easy packaging of mismatching files)
    • cts: Added a new cli arg to the runner script: --keep-matching-outputs to prevent the deletion of matching output files
    • dfdUtils: Implement 4:2:2 support
    • dfdUtils: Implement support for 10X6 and 10X4 formats
    • imageio: Fix stdin support
    • ktx: Add stringToVkFormat to mkvkformatfiles
    • ktx: Implement 3D BC support (ASTC 3D Blocks)
    • ktx: Implement 4:2:2 support
    • ktx: Complete support for Depth-Stencil formats
    • ktx: Improve interpretDFD
    • ktx: Improvements, cleanup and bug fixes
    • cmake: Add CMake generator expression for output directory on Mac

JS Wrappers

  • Improve documentation (#730) (69b1685a) (@MarkCallow)

    • Rework navigation among the multiple Doxygen projects for much easier use.
    • Rename new ktx tool man pages from ktxtools\_* to ktx\_*
    • Add ktx tool mainpage based on RELEASE_NOTES info.
    • Make minor formatting fix in ktx man page.
    • Update acknowledgements.
    • Remove outdated TODO.md.
    • Add script to do $Date$ keyword smudging. Use it in CI and reference it from README.md to avoid repetition of list of files needing smudging.
    • Add $Date$ keywords to some docs.
    • Remove $Date$ and #ident keywords that are no longer needed or used.
    • Document the parts of khr\_df.h relevant to the libktx API.

Version 4.3.0-alpha2

Changes since v4.3.0-alpha1 (by part)

libktx

  • Fix alignment, removes tabs (8e4ee5d5) (@abbaswasim)

  • Fix memory leak of input_image in ktxTexture2_CompressAstcEx (04bdffe0) (@abbaswasim)

Version 4.3.0-alpha1

Changes since v4.2.1 (by part)

libktx

  • Merge ktxtools into main (#714) (a6abf2ff) (@VaderY)

Tools

  • Merge ktxtools into main (#714) (a6abf2ff) (@VaderY)

JS Wrappers

  • Merge ktxtools into main (#714) (a6abf2ff) (@VaderY)

Java Wrapper

  • Merge ktxtools into main (#714) (a6abf2ff) (@VaderY)

v4.3.1

4 months ago

New Features in Version 4.3

Command Line Tools Suite

v4.3.0 contains a new suite of command line tools accessed via an umbrella ktx command.

Tool Description Equivalent old tool
ktx create Create a KTX2 file from various input files toktx
ktx extract Export selected images from a KTX2 file -
ktx encode Encode a KTX2 file to a Basis Universal format ktxsc
ktx transcode Transcode a KTX2 file -
ktx info Prints information about a KTX2 file ktxinfo
ktx validate Validate a KTX2 file ktx2check
ktx help Display help information about the ktx tools -

Equivalent old tools will be removed in a subsequent release soon.

Some features of the old tools are not currently available in the new equivalent.

Old Tool New Tool Missing Features
toktx create JPEG and NBPM input and scaling/resizing of input images.
ktxsc encode ASTC encoding of a KTX2 file. This can be done in create.
Deflation of a KTX2 file with zlib or zstd.

The command-line syntax and semantics differ from the old tools including, but not limited to:

  • KTX 1.0 files are not supported by the new tools.

  • Words in multi-word option names are connected with - instead of _.

  • Individual option names may differ between the old and new tools.

  • The ktx validate tool may be stricter than ktx2check or otherwise differ in behavior, as the new tool enforces all rules of the KTX 2.0 specification. In addition, all new tools that accept KTX 2.0 files as input will be validated in a similar fashion as they would be with the ktx validate tool and will fail on the first specification rule violation, if there is one. It also has the option to output the validation results in human readable text format or in JSON format (both formatted and minified options are available), as controlled by the --format command-line option.

  • The ktx validate tool also supports validating KTX 2.0 files against the additional restrictions defined by the KHR_texture_basisu extension. Use the --gltf-basisu command-line option to verify glTF and WebGL compatibility.

  • The new ktx info tool produces a unified and complete output of all metadata in KTX 2.0 files and can provide output in human readable text format or in JSON format (both formatted and minified options are available), as controlled by the --format command-line option.

  • The source repository also includes the JSON schemas that the JSON outputs of the ktx info and ktx validate tools comply to.

  • The ktx create tool takes an explicit Vulkan format argument (--format) instead of inferring the format based on the provided input files as toktx, and thus doesn't perform any implicit color-space conversions except gamma 2.2 to sRGB. Use the --assign-oetf, --convert-oetf, --assign-primaries, and the new --convert-primaries for fine grained control over color-space interpretation and conversion.

  • The ktx create tool does not support resizing or scaling like toktx, and, in general, does not perform any image transformations except the optional color-space conversion and mipmap generation options. Users should resize input images to the appropriate resolution before converting them to KTX 2.0 files.

  • The ktx create and ktx extract tools consume and produce, respectively, image file formats that best suit the used Vulkan format. In general, barring special cases, 8-bit and 16-bit normalized integer formats are imported from and exported to PNG files, while integer and floating point formats are imported from and exported to EXR files based on predefined rules. This may be extended in the future using additional command line options and in response to support for other image file formats.

  • The new tools and updated libktx support ZLIB supercompression besides the BasisLZ and Zstd supercompression schemes supported previously.

Please refer to the manual pages or use the --help command-line option for further details on the options available and associated semantics for each individual command.

Thanks to @aqnuep and @VaderY of RasterGrid for their excellent work on the new tool suite.

Python Binding

A Python binding for libktx has been added. Applications written in Python can now use libktx functions. The package can be installed via pip install pyktx[==4.3.0]. Huge thanks to @ShukantPal.

Changes

  • libktx has been made much more robust to errors in KTX files.
  • libktx now validates checksums when present in a Zstd data stream.
  • libktx has two new error codes it can return: KTX_DECOMPRESS_LENGTH_ERROR and KTX_DECOMPRESS_CHECKSUM_ERROR.
  • All tools and libktx now correctly process on all platforms utf8 file names with multi-byte code-points. Previously such names did not work on Windows.
  • The Vulkan texture uploader can now optionally be used with an extenal memory allocator such as VulkanMemoryAllocator.

Known Issues

  • Some image bits in output files encoded to ASTC, ETC1S/Basis-LZ or UASTC on arm64 devices may differ from those encoded from the same input images on x86_64 devices. The differences will not be human visible and will only show up in bit-exact comparisons.

  • Users making Basis Universal encoded or GPU block compressed textures for WebGL must be aware of WebGL restrictions with regard to texture size and may need to resize input images appropriately before using the ktx create tool, or use the --resize feature of the old toktx tool to produce an appropriately sized texture. In general, the dimensions of block compressed textures must be a multiple of the block size in WebGL and for WebGL 1.0 textures must have power-of-two dimensions. Additional portability restrictions apply for glTF per the KHR_texture_basisu extension which can be verified using the --gltf-basisu command-line option of the new ktx validate tool.

  • Basis Universal encoding results (both ETC1S/LZ and UASTC) are non-deterministic across platforms. Results are valid but level sizes and data will differ slightly. See issue #60 in the basis_universal repository.

  • UASTC RDO results differ from run to run unless multi-threading or RDO multi-threading is disabled. In toktx use --threads 1 for the former or --uastc_rdo_m for the latter. As with the preceeding issue results are valid but level sizes will differ slightly. See issue #151 in the basis_universal repository.

  • Neither the Vulkan nor GL loaders support depth/stencil textures.

Changes since v4.3.0 (by part)

Tools

  • Fix lingering KTXwriterScParams metadata from encode/transcode inputs (#852) (d3010bdc8) (@aqnuep)

Version 4.3.0

Changes since v4.3.0-beta1 (by part)

libktx

  • Rename branch to match upstream. (aaba10479) (@MarkCallow)

  • Add option to enable mkvk targets (VkFormat-related file generation). (#840) (e77a5316f) (@MarkCallow)

Tools

  • Report error on excess filenames (#843) (c32d99a08) (@aqnuep)

  • Fix error message typo (#837) (7dedd7e60) (@aqnuep)

  • Fix creating 3D textures and add KTXwriterScParams support to transcode (#833) (01d220c36) (@aqnuep)

  • Move buffer size check to base class. (dab91cf8e) (@MarkCallow)

Version 4.3.0-beta1

Changes since v4.3.0-alpha3 (by part)

libktx

  • git subrepo push lib/dfdutils (ab9c27707) (@MarkCallow)

  • Reenable build of loadtest apps on Windows arm64 CI (#802) (6c131f75f) (@MarkCallow)

  • Utf-8/unicode support in legacy tools and lib. (#800) (1c5dc9cf6) (@MarkCallow)

  • Do not redefine NOMINMAX (#801) (6dbb24643) (@corporateshark)

  • libktx: update ktxTexture2_setImageFromStream to allow setting the entire level's data in one call (#794) (88fc7a6e9) (@AlexRouSg)

  • Update dfdutils-included vulkan_core.h. (#783) (9c223d950) (@MarkCallow)

  • Support for A8 and A1B5G5R5 formats (#785) (eeac6206c) (@aqnuep)

  • Major non-content documentation fixes. (#773) (e6a6a3be9) (@MarkCallow)

  • Fix vendor-specific/tied memory property flag detection (#771) (a10021758) (@toomuchvoltage)

  • Return KTX_NOT_FOUND when a GPU proc is not found. (#770) (aeca5e695) (@MarkCallow)

  • Support for external allocators: (#748) (6856fdb0d) (@toomuchvoltage)

  • Fix ktx_strncasecmp (#741) (1ae04f897) (@VaderY)

  • Use correct counter for indexing sample. (#739) (3153e94e8) (@MarkCallow)

Tools

  • Disallow ASTC options when format is not ASTC (#809) (d3ef5ed8b) (@aqnuep)

  • Remove unnecessary nullptr checks. (#807) (072a4eb25) (@MarkCallow)

  • Set tools and tests rpath on Linux. (#804) (928612a71) (@MarkCallow)

  • Utf-8/unicode support in legacy tools and lib. (#800) (1c5dc9cf6) (@MarkCallow)

  • Support building of loadtest apps with locally installed dependencies (#799) (84ee59dd2) (@MarkCallow)

  • Update dfdutils-included vulkan_core.h. (#783) (9c223d950) (@MarkCallow)

  • Add UTF-8 filename support on Windows to ktxtools (#788) (7b6eab5dc) (@aqnuep)

  • Support for A8 and A1B5G5R5 formats (#785) (eeac6206c) (@aqnuep)

  • KTXwriterScParams support (#779) (f8691ff05) (@aqnuep)

  • Use -- in doc. to get -- not n-dash in output. (#767) (724790094) (@MarkCallow)

  • Document convert_primaries option in toktx. (#765) (3049f5b5e) (@MarkCallow)

  • Do target_type changes only in toktx (#757) (2cf053c19) (@MarkCallow)

  • Add support for fewer components in input files (#755) (adcccf152) (@aqnuep)

  • Fix --convert-primaries (#753) (e437ec45f) (@aqnuep)

  • Fix legacy app input from pipes on Windows. (#749) (3e7fd0af6) (@MarkCallow)

  • Improve output determinism and add internal ktxdiff tool for comparing test outputs (#745) (7f67af7e0) (@VaderY)

  • Add KTX_WERROR config option (#746) (dab32db90) (@MarkCallow)

  • Fix incorrect index calculations in image conversions (#735) (682f456de) (@VaderY)

  • Color-space and documentation related improvements for ktx create (#732) (8b12216f7) (@VaderY)

Java Wrapper

  • Update dfdutils-included vulkan_core.h. (#783) (9c223d950) (@MarkCallow)

Version 4.3.0-alpha3

Changes since v4.3.0-alpha2 (by part)

libktx

  • Improve documentation (#730) (69b1685a) (@MarkCallow)

    • Rework navigation among the multiple Doxygen projects for much easier use.
    • Rename new ktx tool man pages from ktxtools\_* to ktx\_*
    • Add ktx tool mainpage based on RELEASE_NOTES info.
    • Make minor formatting fix in ktx man page.
    • Update acknowledgements.
    • Remove outdated TODO.md.
    • Add script to do $Date$ keyword smudging. Use it in CI and reference it from README.md to avoid repetition of list of files needing smudging.
    • Add $Date$ keywords to some docs.
    • Remove $Date$ and #ident keywords that are no longer needed or used.
    • Document the parts of khr\_df.h relevant to the libktx API.
  • Implement the extended scope and further improvements for ktxtools (#722) (2189c54e) (@VaderY)

    • tools: Implement stdout support
    • tools: Implement stdin support
    • tools: Implement 4:2:2 support
    • tools: Implement support for 10X6 and 10X4 formats
    • tools: Implement support for B10G11R11_UFLOAT and E5B9G9R9_UFLOAT formats
    • tools: Complete support for Depth-Stencil formats
    • tools: Improvements, cleanup and bug fixes
    • extract: Implement fragment URI support
    • extract: Implement 4:2:2 sub-sampling
    • validate: Fix and extend padding byte validation checks
    • cts: Add support for stdin/stdout test cases (including binary IO)
    • cts: Add tests to cover new features and capabilities
    • cts: Extend existing tests to improve coverage
    • cts: Test runner now deletes matching output files (this enables easy packaging of mismatching files)
    • cts: Added a new cli arg to the runner script: --keep-matching-outputs to prevent the deletion of matching output files
    • dfdUtils: Implement 4:2:2 support
    • dfdUtils: Implement support for 10X6 and 10X4 formats
    • imageio: Fix stdin support
    • ktx: Add stringToVkFormat to mkvkformatfiles
    • ktx: Implement 3D BC support (ASTC 3D Blocks)
    • ktx: Implement 4:2:2 support
    • ktx: Complete support for Depth-Stencil formats
    • ktx: Improve interpretDFD
    • ktx: Improvements, cleanup and bug fixes
    • cmake: Add CMake generator expression for output directory on Mac

Tools

  • Improve documentation (#730) (69b1685a) (@MarkCallow)

    • Rework navigation among the multiple Doxygen projects for much easier use.
    • Rename new ktx tool man pages from ktxtools\_* to ktx\_*
    • Add ktx tool mainpage based on RELEASE_NOTES info.
    • Make minor formatting fix in ktx man page.
    • Update acknowledgements.
    • Remove outdated TODO.md.
    • Add script to do $Date$ keyword smudging. Use it in CI and reference it from README.md to avoid repetition of list of files needing smudging.
    • Add $Date$ keywords to some docs.
    • Remove $Date$ and #ident keywords that are no longer needed or used.
    • Document the parts of khr\_df.h relevant to the libktx API.
  • Implement the extended scope and further improvements for ktxtools (#722) (2189c54e) (@VaderY)

    • tools: Implement stdout support
    • tools: Implement stdin support
    • tools: Implement 4:2:2 support
    • tools: Implement support for 10X6 and 10X4 formats
    • tools: Implement support for B10G11R11_UFLOAT and E5B9G9R9_UFLOAT formats
    • tools: Complete support for Depth-Stencil formats
    • tools: Improvements, cleanup and bug fixes
    • extract: Implement fragment URI support
    • extract: Implement 4:2:2 sub-sampling
    • validate: Fix and extend padding byte validation checks
    • cts: Add support for stdin/stdout test cases (including binary IO)
    • cts: Add tests to cover new features and capabilities
    • cts: Extend existing tests to improve coverage
    • cts: Test runner now deletes matching output files (this enables easy packaging of mismatching files)
    • cts: Added a new cli arg to the runner script: --keep-matching-outputs to prevent the deletion of matching output files
    • dfdUtils: Implement 4:2:2 support
    • dfdUtils: Implement support for 10X6 and 10X4 formats
    • imageio: Fix stdin support
    • ktx: Add stringToVkFormat to mkvkformatfiles
    • ktx: Implement 3D BC support (ASTC 3D Blocks)
    • ktx: Implement 4:2:2 support
    • ktx: Complete support for Depth-Stencil formats
    • ktx: Improve interpretDFD
    • ktx: Improvements, cleanup and bug fixes
    • cmake: Add CMake generator expression for output directory on Mac

JS Wrappers

  • Improve documentation (#730) (69b1685a) (@MarkCallow)

    • Rework navigation among the multiple Doxygen projects for much easier use.
    • Rename new ktx tool man pages from ktxtools\_* to ktx\_*
    • Add ktx tool mainpage based on RELEASE_NOTES info.
    • Make minor formatting fix in ktx man page.
    • Update acknowledgements.
    • Remove outdated TODO.md.
    • Add script to do $Date$ keyword smudging. Use it in CI and reference it from README.md to avoid repetition of list of files needing smudging.
    • Add $Date$ keywords to some docs.
    • Remove $Date$ and #ident keywords that are no longer needed or used.
    • Document the parts of khr\_df.h relevant to the libktx API.

Version 4.3.0-alpha2

Changes since v4.3.0-alpha1 (by part)

libktx

  • Fix alignment, removes tabs (8e4ee5d5) (@abbaswasim)

  • Fix memory leak of input_image in ktxTexture2_CompressAstcEx (04bdffe0) (@abbaswasim)

Version 4.3.0-alpha1

Changes since v4.2.1 (by part)

libktx

  • Merge ktxtools into main (#714) (a6abf2ff) (@VaderY)

Tools

  • Merge ktxtools into main (#714) (a6abf2ff) (@VaderY)

JS Wrappers

  • Merge ktxtools into main (#714) (a6abf2ff) (@VaderY)

Java Wrapper

  • Merge ktxtools into main (#714) (a6abf2ff) (@VaderY)

v4.3.0-beta1

6 months ago

New Features in Version 4.3.0

Command Line Tools Suite

v4.3.0 contains a new suite of command line tools accessed via an umbrella ktx command.

Tool Description Equivalent old tool
ktx create Create a KTX2 file from various input files toktx
ktx extract Export selected images from a KTX2 file -
ktx encode Encode a KTX2 file to a Basis Universal format ktxsc
ktx transcode Transcode a KTX2 file -
ktx info Prints information about a KTX2 file ktxinfo
ktx validate Validate a KTX2 file ktx2check
ktx help Display help information about the ktx tools -

Equivalent old tools will be removed in a subsequent release soon.

Some features of the old tools are not currently available in the new equivalent.

Old Tool New Tool Missing Features
toktx create JPEG and NBPM input and scaling/resizing of input images.
ktxsc encode ASTC encoding of a KTX2 file. This can be done in create.
Deflation of a KTX2 file with zlib or zstd.

The command-line syntax and semantics differ from the old tools including, but not limited to:

  • KTX 1.0 files are not supported by the new tools.

  • Words in multi-word option names are connected with - instead of _.

  • Individual option names may differ between the old and new tools.

  • The ktx validate tool may be stricter than ktx2check or otherwise differ in behavior, as the new tool enforces all rules of the KTX 2.0 specification. In addition, all new tools that accept KTX 2.0 files as input will be validated in a similar fashion as they would be with the ktx validate tool and will fail on the first specification rule violation, if there is one. It also has the option to output the validation results in human readable text format or in JSON format (both formatted and minified options are available), as controlled by the --format command-line option.

  • The ktx validate tool also supports validating KTX 2.0 files against the additional restrictions defined by the KHR_texture_basisu extension. Use the --gltf-basisu command-line option to verify glTF and WebGL compatibility.

  • The new ktx info tool produces a unified and complete output of all metadata in KTX 2.0 files and can provide output in human readable text format or in JSON format (both formatted and minified options are available), as controlled by the --format command-line option.

  • The source repository also includes the JSON schemas that the JSON outputs of the ktx info and ktx validate tools comply to.

  • The ktx create tool takes an explicit Vulkan format argument (--format) instead of inferring the format based on the provided input files as toktx, and thus doesn't perform any implicit color-space conversions except gamma 2.2 to sRGB. Use the --assign-oetf, --convert-oetf, --assign-primaries, and the new --convert-primaries for fine grained control over color-space interpretation and conversion.

  • The ktx create tool does not support resizing or scaling like toktx, and, in general, does not perform any image transformations except the optional color-space conversion and mipmap generation options. Users should resize input images to the appropriate resolution before converting them to KTX 2.0 files.

  • The ktx create and ktx extract tools consume and produce, respectively, image file formats that best suit the used Vulkan format. In general, barring special cases, 8-bit and 16-bit normalized integer formats are imported from and exported to PNG files, while integer and floating point formats are imported from and exported to EXR files based on predefined rules. This may be extended in the future using additional command line options and in response to support for other image file formats.

  • The new tools and updated libktx support ZLIB supercompression besides the BasisLZ and Zstd supercompression schemes supported previously.

Please refer to the manual pages or use the --help command-line option for further details on the options available and associated semantics for each individual command.

Python Binding

A Python binding for libktx has been added. Applications written in Python can now use libktx functions. Huge thanks to @ShukantPal. Please download the appropriate pyktx package from Releases as publishing to PyPI is not yet established.

Changes

  • libktx has been made much more robust to errors KTX files.
  • libktx now validates checksums when present in a Zstd data stream.
  • libktx has two new error codes it can return: KTX_DECOMPRESS_LENGTH_ERROR and KTX_DECOMPRESS_CHECKSUM_ERROR.
  • All tools and libktx now correctly process on all platforms utf8 file names with multi-byte code-points. Previously such names did not work on Windows.
  • The Vulkan texture uploader can now optionally be used with an extenal memory allocator such as VulkanMemoryAllocator.

Known Issues

  • Some image bits in output files encoded to ASTC, ETC1S/Basis-LZ or UASTC on arm64 devices may differ from those encoded from the same input images on x86_64 devices. The differences will not be human visible and will only show up in bit-exact comparisons.

  • Users making Basis Universal encoded or GPU block compressed textures for WebGL must be aware of WebGL restrictions with regard to texture size and may need to resize input images appropriately before using the ktx create tool, or use the --resize feature of the old toktx tool to produce an appropriately sized texture. In general, the dimensions of block compressed textures must be a multiple of the block size in WebGL and for WebGL 1.0 textures must have power-of-two dimensions. Additional portability restrictions apply for glTF per the KHR_texture_basisu extension which can be verified using the --gltf-basisu command-line option of the new ktx validate tool.

  • Basis Universal encoding results (both ETC1S/LZ and UASTC) are non-deterministic across platforms. Results are valid but level sizes and data will differ slightly. See issue #60 in the basis_universal repository.

  • UASTC RDO results differ from run to run unless multi-threading or RDO multi-threading is disabled. In toktx use --threads 1 for the former or --uastc_rdo_m for the latter. As with the preceeding issue results are valid but level sizes will differ slightly. See issue #151 in the basis_universal repository.

  • Neither the Vulkan nor GL loaders support depth/stencil textures.

Changes since v4.3.0-alpha3 (by part)

libktx

  • git subrepo push lib/dfdutils (ab9c27707) (@MarkCallow)

  • Reenable build of loadtest apps on Windows arm64 CI (#802) (6c131f75f) (@MarkCallow)

  • Utf-8/unicode support in legacy tools and lib. (#800) (1c5dc9cf6) (@MarkCallow)

  • Do not redefine NOMINMAX (#801) (6dbb24643) (@corporateshark)

  • libktx: update ktxTexture2_setImageFromStream to allow setting the entire level's data in one call (#794) (88fc7a6e9) (@AlexRouSg)

  • Update dfdutils-included vulkan_core.h. (#783) (9c223d950) (@MarkCallow)

  • Support for A8 and A1B5G5R5 formats (#785) (eeac6206c) (@aqnuep)

  • Major non-content documentation fixes. (#773) (e6a6a3be9) (@MarkCallow)

  • Fix vendor-specific/tied memory property flag detection (#771) (a10021758) (@toomuchvoltage)

  • Return KTX_NOT_FOUND when a GPU proc is not found. (#770) (aeca5e695) (@MarkCallow)

  • Support for external allocators: (#748) (6856fdb0d) (@toomuchvoltage)

  • Fix ktx_strncasecmp (#741) (1ae04f897) (@VaderY)

  • Use correct counter for indexing sample. (#739) (3153e94e8) (@MarkCallow)

Tools

  • Disallow ASTC options when format is not ASTC (#809) (d3ef5ed8b) (@aqnuep)

  • Remove unnecessary nullptr checks. (#807) (072a4eb25) (@MarkCallow)

  • Set tools and tests rpath on Linux. (#804) (928612a71) (@MarkCallow)

  • Utf-8/unicode support in legacy tools and lib. (#800) (1c5dc9cf6) (@MarkCallow)

  • Support building of loadtest apps with locally installed dependencies (#799) (84ee59dd2) (@MarkCallow)

  • Update dfdutils-included vulkan_core.h. (#783) (9c223d950) (@MarkCallow)

  • Add UTF-8 filename support on Windows to ktxtools (#788) (7b6eab5dc) (@aqnuep)

  • Support for A8 and A1B5G5R5 formats (#785) (eeac6206c) (@aqnuep)

  • KTXwriterScParams support (#779) (f8691ff05) (@aqnuep)

  • Use -- in doc. to get -- not n-dash in output. (#767) (724790094) (@MarkCallow)

  • Document convert_primaries option in toktx. (#765) (3049f5b5e) (@MarkCallow)

  • Do target_type changes only in toktx (#757) (2cf053c19) (@MarkCallow)

  • Add support for fewer components in input files (#755) (adcccf152) (@aqnuep)

  • Fix --convert-primaries (#753) (e437ec45f) (@aqnuep)

  • Fix legacy app input from pipes on Windows. (#749) (3e7fd0af6) (@MarkCallow)

  • Improve output determinism and add internal ktxdiff tool for comparing test outputs (#745) (7f67af7e0) (@VaderY)

  • Add KTX_WERROR config option (#746) (dab32db90) (@MarkCallow)

  • Fix incorrect index calculations in image conversions (#735) (682f456de) (@VaderY)

  • Color-space and documentation related improvements for ktx create (#732) (8b12216f7) (@VaderY)

Java Wrapper

  • Update dfdutils-included vulkan_core.h. (#783) (9c223d950) (@MarkCallow)

Version 4.3.0-alpha3

Changes since v4.3.0-alpha2 (by part)

libktx

  • Improve documentation (#730) (69b1685a) (@MarkCallow)

    • Rework navigation among the multiple Doxygen projects for much easier use.
    • Rename new ktx tool man pages from ktxtools\_* to ktx\_*
    • Add ktx tool mainpage based on RELEASE_NOTES info.
    • Make minor formatting fix in ktx man page.
    • Update acknowledgements.
    • Remove outdated TODO.md.
    • Add script to do $Date$ keyword smudging. Use it in CI and reference it from README.md to avoid repetition of list of files needing smudging.
    • Add $Date$ keywords to some docs.
    • Remove $Date$ and #ident keywords that are no longer needed or used.
    • Document the parts of khr\_df.h relevant to the libktx API.
  • Implement the extended scope and further improvements for ktxtools (#722) (2189c54e) (@VaderY)

    • tools: Implement stdout support
    • tools: Implement stdin support
    • tools: Implement 4:2:2 support
    • tools: Implement support for 10X6 and 10X4 formats
    • tools: Implement support for B10G11R11_UFLOAT and E5B9G9R9_UFLOAT formats
    • tools: Complete support for Depth-Stencil formats
    • tools: Improvements, cleanup and bug fixes
    • extract: Implement fragment URI support
    • extract: Implement 4:2:2 sub-sampling
    • validate: Fix and extend padding byte validation checks
    • cts: Add support for stdin/stdout test cases (including binary IO)
    • cts: Add tests to cover new features and capabilities
    • cts: Extend existing tests to improve coverage
    • cts: Test runner now deletes matching output files (this enables easy packaging of mismatching files)
    • cts: Added a new cli arg to the runner script: --keep-matching-outputs to prevent the deletion of matching output files
    • dfdUtils: Implement 4:2:2 support
    • dfdUtils: Implement support for 10X6 and 10X4 formats
    • imageio: Fix stdin support
    • ktx: Add stringToVkFormat to mkvkformatfiles
    • ktx: Implement 3D BC support (ASTC 3D Blocks)
    • ktx: Implement 4:2:2 support
    • ktx: Complete support for Depth-Stencil formats
    • ktx: Improve interpretDFD
    • ktx: Improvements, cleanup and bug fixes
    • cmake: Add CMake generator expression for output directory on Mac

Tools

  • Improve documentation (#730) (69b1685a) (@MarkCallow)

    • Rework navigation among the multiple Doxygen projects for much easier use.
    • Rename new ktx tool man pages from ktxtools\_* to ktx\_*
    • Add ktx tool mainpage based on RELEASE_NOTES info.
    • Make minor formatting fix in ktx man page.
    • Update acknowledgements.
    • Remove outdated TODO.md.
    • Add script to do $Date$ keyword smudging. Use it in CI and reference it from README.md to avoid repetition of list of files needing smudging.
    • Add $Date$ keywords to some docs.
    • Remove $Date$ and #ident keywords that are no longer needed or used.
    • Document the parts of khr\_df.h relevant to the libktx API.
  • Implement the extended scope and further improvements for ktxtools (#722) (2189c54e) (@VaderY)

    • tools: Implement stdout support
    • tools: Implement stdin support
    • tools: Implement 4:2:2 support
    • tools: Implement support for 10X6 and 10X4 formats
    • tools: Implement support for B10G11R11_UFLOAT and E5B9G9R9_UFLOAT formats
    • tools: Complete support for Depth-Stencil formats
    • tools: Improvements, cleanup and bug fixes
    • extract: Implement fragment URI support
    • extract: Implement 4:2:2 sub-sampling
    • validate: Fix and extend padding byte validation checks
    • cts: Add support for stdin/stdout test cases (including binary IO)
    • cts: Add tests to cover new features and capabilities
    • cts: Extend existing tests to improve coverage
    • cts: Test runner now deletes matching output files (this enables easy packaging of mismatching files)
    • cts: Added a new cli arg to the runner script: --keep-matching-outputs to prevent the deletion of matching output files
    • dfdUtils: Implement 4:2:2 support
    • dfdUtils: Implement support for 10X6 and 10X4 formats
    • imageio: Fix stdin support
    • ktx: Add stringToVkFormat to mkvkformatfiles
    • ktx: Implement 3D BC support (ASTC 3D Blocks)
    • ktx: Implement 4:2:2 support
    • ktx: Complete support for Depth-Stencil formats
    • ktx: Improve interpretDFD
    • ktx: Improvements, cleanup and bug fixes
    • cmake: Add CMake generator expression for output directory on Mac

JS Wrappers

  • Improve documentation (#730) (69b1685a) (@MarkCallow)

    • Rework navigation among the multiple Doxygen projects for much easier use.
    • Rename new ktx tool man pages from ktxtools\_* to ktx\_*
    • Add ktx tool mainpage based on RELEASE_NOTES info.
    • Make minor formatting fix in ktx man page.
    • Update acknowledgements.
    • Remove outdated TODO.md.
    • Add script to do $Date$ keyword smudging. Use it in CI and reference it from README.md to avoid repetition of list of files needing smudging.
    • Add $Date$ keywords to some docs.
    • Remove $Date$ and #ident keywords that are no longer needed or used.
    • Document the parts of khr\_df.h relevant to the libktx API.

Version 4.3.0-alpha2

Changes since v4.3.0-alpha1 (by part)

libktx

  • Fix alignment, removes tabs (8e4ee5d5) (@abbaswasim)

  • Fix memory leak of input_image in ktxTexture2_CompressAstcEx (04bdffe0) (@abbaswasim)

Version 4.3.0-alpha1

Changes since v4.2.1 (by part)

libktx

  • Merge ktxtools into main (#714) (a6abf2ff) (@VaderY)

Tools

  • Merge ktxtools into main (#714) (a6abf2ff) (@VaderY)

JS Wrappers

  • Merge ktxtools into main (#714) (a6abf2ff) (@VaderY)

Java Wrapper

  • Merge ktxtools into main (#714) (a6abf2ff) (@VaderY)

v4.3.0-alpha3

11 months ago

New Features

v4.3.0 contains a new suite of command line tools accessed via an umbrella ktx command.

Tool Description Equivalent old tool
ktx create Create a KTX2 file from various input files toktx
ktx extract Export selected images from a KTX2 file -
ktx encode Encode a KTX2 file ktxsc
ktx transcode Transcode a KTX2 file -
ktx info Prints information about a KTX2 file ktxinfo
ktx validate Validate a KTX2 file ktx2check
ktx help Display help information about the ktx tools -

Equivalent old tools will be removed in the next release.

Some features of the old tools are not currently available in the new equivalent.

Old Tool New Tool Missing Features
toktx create JPEG and NBPM input and scaling/resizing.
ktxsc encode ASTC encoding. This can be done in create.

The command-line syntax and semantics differ from the old tools including, but not limited to:

  • KTX 1.0 files are not supported by the new tools.

  • Words in multi-word option names are connected with - instead of _.

  • Individual option names may differ between the old and new tools.

  • The ktx validate tool may be stricter than ktx2check or otherwise differ in behavior, as the new tool enforces all rules of the KTX 2.0 specification. In addition, all new tools that accept KTX 2.0 files as input will be validated in a similar fashion as they would be with the ktx validate tool and will fail on the first specification rule violation, if there is one. It also has the option to output the validation results in human readable text format or in JSON format (both formatted and minified options are available), as controlled by the --format command-line option.

  • The ktx validate tool also supports validating KTX 2.0 files against the additional restrictions defined by the KHR_texture_basisu extension. Use the --gltf-basisu command-line option to verify glTF and WebGL compatibility.

  • The new ktx info tool produces a unified and complete output of all metadata in KTX 2.0 files and can provide output in human readable text format or in JSON format (both formatted and minified options are available), as controlled by the --format command-line option.

  • The source repository also includes the JSON schemas that the JSON outputs of the ktx info and ktx validate tools comply to.

  • The ktx create tool takes an explicit Vulkan format argument (--format) instead of inferring the format based on the provided input files as toktx, and thus doesn't perform any implicit color-space conversions except gamma 2.2 to sRGB. Use the --assign-oetf, --convert-oetf, --assign-primaries, and the new --convert-primaries for fine grained control over color-space interpretation and conversion.

  • The ktx create tool does not support resizing or scaling like toktx, and, in general, does not perform any image transformations except the optional color-space conversion and mipmap generation options. Users should resize input images to the appropriate resolution before converting them to KTX 2.0 files.

  • The ktx create and ktx extract tools consume and produce, respectively, image file formats that best suit the used Vulkan format. In general, barring special cases, 8-bit and 16-bit normalized integer formats are imported from and exported to PNG files, while integer and floating point formats are imported from and exported to EXR files based on predefined rules. This may be extended in the future using additional command line options and in response to support for other image file formats.

  • The new tools and updated libktx support ZLIB supercompression besides the BasisLZ and Zstd supercompression schemes supported previously.

Please refer to the manual pages or use the --help command-line option for further details on the options available and associated semantics for each individual command.

Changes

  • libktx has been made much more robust to errors KTX files.

  • libktx now validates checksums when present in a Zstd data stream.

  • libktx has two new error codes it can return: KTX_DECOMPRESS_LENGTH_ERROR and KTX_DECOMPRESS_CHECKSUM_ERROR.

Known Issues

  • Some image bits in output files encoded to ASTC, ETC1S/Basis-LZ or UASTC on arm64 devices may differ from those encoded from the same input images on x86_64 devices. The differences will not be human visible and will only show up in bit-exact comparisons.

  • Users making Basis Universal encoded or GPU block compressed textures for WebGL must be aware of WebGL restrictions with regard to texture size and may need to resize input images appropriately before using the ktx create tool, or use the --resize feature of the old toktx tool to produce an appropriately sized texture. In general, the dimensions of block compressed textures must be a multiple of the block size in WebGL and for WebGL 1.0 textures must have power-of-two dimensions. Additional portability restrictions apply for glTF per the KHR_texture_basisu extension which can be verified using the --gltf-basisu command-line option of the new ktx validate tool.

  • Basis Universal encoding results (both ETC1S/LZ and UASTC) are non-deterministic across platforms. Results are valid but level sizes and data will differ slightly. See issue #60 in the basis_universal repository.

  • UASTC RDO results differ from run to run unless multi-threading or RDO multi-threading is disabled. In toktx use --threads 1 for the former or --uastc_rdo_m for the latter. As with the preceeding issue results are valid but level sizes will differ slightly. See issue #151 in the basis_universal repository.

  • Neither the Vulkan nor GL loaders support depth/stencil textures.

Changes since v4.3.0-alpha2 (by part)

libktx

  • Improve documentation (#730) (69b1685a) (@MarkCallow)

    • Rework navigation among the multiple Doxygen projects for much easier use.
    • Rename new ktx tool man pages from ktxtools\_* to ktx\_*
    • Add ktx tool mainpage based on RELEASE_NOTES info.
    • Make minor formatting fix in ktx man page.
    • Update acknowledgements.
    • Remove outdated TODO.md.
    • Add script to do $Date$ keyword smudging. Use it in CI and reference it from README.md to avoid repetition of list of files needing smudging.
    • Add $Date$ keywords to some docs.
    • Remove $Date$ and #ident keywords that are no longer needed or used.
    • Document the parts of khr\_df.h relevant to the libktx API.
  • Implement the extended scope and further improvements for ktxtools (#722) (2189c54e) (@VaderY)

    • tools: Implement stdout support
    • tools: Implement stdin support
    • tools: Implement 4:2:2 support
    • tools: Implement support for 10X6 and 10X4 formats
    • tools: Implement support for B10G11R11_UFLOAT and E5B9G9R9_UFLOAT formats
    • tools: Complete support for Depth-Stencil formats
    • tools: Improvements, cleanup and bug fixes
    • extract: Implement fragment URI support
    • extract: Implement 4:2:2 sub-sampling
    • validate: Fix and extend padding byte validation checks
    • cts: Add support for stdin/stdout test cases (including binary IO)
    • cts: Add tests to cover new features and capabilities
    • cts: Extend existing tests to improve coverage
    • cts: Test runner now deletes matching output files (this enables easy packaging of mismatching files)
    • cts: Added a new cli arg to the runner script: --keep-matching-outputs to prevent the deletion of matching output files
    • dfdUtils: Implement 4:2:2 support
    • dfdUtils: Implement support for 10X6 and 10X4 formats
    • imageio: Fix stdin support
    • ktx: Add stringToVkFormat to mkvkformatfiles
    • ktx: Implement 3D BC support (ASTC 3D Blocks)
    • ktx: Implement 4:2:2 support
    • ktx: Complete support for Depth-Stencil formats
    • ktx: Improve interpretDFD
    • ktx: Improvements, cleanup and bug fixes
    • cmake: Add CMake generator expression for output directory on Mac

Tools

  • Improve documentation (#730) (69b1685a) (@MarkCallow)

    • Rework navigation among the multiple Doxygen projects for much easier use.
    • Rename new ktx tool man pages from ktxtools\_* to ktx\_*
    • Add ktx tool mainpage based on RELEASE_NOTES info.
    • Make minor formatting fix in ktx man page.
    • Update acknowledgements.
    • Remove outdated TODO.md.
    • Add script to do $Date$ keyword smudging. Use it in CI and reference it from README.md to avoid repetition of list of files needing smudging.
    • Add $Date$ keywords to some docs.
    • Remove $Date$ and #ident keywords that are no longer needed or used.
    • Document the parts of khr\_df.h relevant to the libktx API.
  • Implement the extended scope and further improvements for ktxtools (#722) (2189c54e) (@VaderY)

    • tools: Implement stdout support
    • tools: Implement stdin support
    • tools: Implement 4:2:2 support
    • tools: Implement support for 10X6 and 10X4 formats
    • tools: Implement support for B10G11R11_UFLOAT and E5B9G9R9_UFLOAT formats
    • tools: Complete support for Depth-Stencil formats
    • tools: Improvements, cleanup and bug fixes
    • extract: Implement fragment URI support
    • extract: Implement 4:2:2 sub-sampling
    • validate: Fix and extend padding byte validation checks
    • cts: Add support for stdin/stdout test cases (including binary IO)
    • cts: Add tests to cover new features and capabilities
    • cts: Extend existing tests to improve coverage
    • cts: Test runner now deletes matching output files (this enables easy packaging of mismatching files)
    • cts: Added a new cli arg to the runner script: --keep-matching-outputs to prevent the deletion of matching output files
    • dfdUtils: Implement 4:2:2 support
    • dfdUtils: Implement support for 10X6 and 10X4 formats
    • imageio: Fix stdin support
    • ktx: Add stringToVkFormat to mkvkformatfiles
    • ktx: Implement 3D BC support (ASTC 3D Blocks)
    • ktx: Implement 4:2:2 support
    • ktx: Complete support for Depth-Stencil formats
    • ktx: Improve interpretDFD
    • ktx: Improvements, cleanup and bug fixes
    • cmake: Add CMake generator expression for output directory on Mac

JS Wrappers

  • Improve documentation (#730) (69b1685a) (@MarkCallow)

    • Rework navigation among the multiple Doxygen projects for much easier use.
    • Rename new ktx tool man pages from ktxtools\_* to ktx\_*
    • Add ktx tool mainpage based on RELEASE_NOTES info.
    • Make minor formatting fix in ktx man page.
    • Update acknowledgements.
    • Remove outdated TODO.md.
    • Add script to do $Date$ keyword smudging. Use it in CI and reference it from README.md to avoid repetition of list of files needing smudging.
    • Add $Date$ keywords to some docs.
    • Remove $Date$ and #ident keywords that are no longer needed or used.
    • Document the parts of khr\_df.h relevant to the libktx API.

Version 4.3.0-alpha2

Changes since v4.3.0-alpha1 (by part)

libktx

  • Fix alignment, removes tabs (8e4ee5d5) (@abbaswasim)

  • Fix memory leak of input_image in ktxTexture2_CompressAstcEx (04bdffe0) (@abbaswasim)

Version 4.3.0-alpha1

Changes since v4.2.1 (by part)

libktx

  • Merge ktxtools into main (#714) (a6abf2ff) (@VaderY)

Tools

  • Merge ktxtools into main (#714) (a6abf2ff) (@VaderY)

JS Wrappers

  • Merge ktxtools into main (#714) (a6abf2ff) (@VaderY)

Java Wrapper

  • Merge ktxtools into main (#714) (a6abf2ff) (@VaderY)

v4.3.0-alpha2

1 year ago

Changes since v4.3.0-alpha1 (by part)

libktx

  • Fix alignment, removes tabs (8e4ee5d5) (@abbaswasim)

  • Fix memory leak of input_image in ktxTexture2_CompressAstcEx (04bdffe0) (@abbaswasim)

Version 4.3.0-alpha1

New Features

v4.3.0 contains a new suite of command line tools accessed via an umbrella ktx command.

Tool Description Equivalent old tool
ktx create Create a KTX2 file from various input files toktx
ktx extract Export selected images from a KTX2 file -
ktx encode Encode a KTX2 file ktxsc
ktx transcode Transcode a KTX2 file -
ktx info Prints information about a KTX2 file ktxinfo
ktx validate Validate a KTX2 file ktx2check
ktx help Display help information about the ktx tools -

Equivalent old tools will be removed in the next release.

Some features of the old tools are not currently available in the new equivalent.

Old Tool New Tool Missing Features
toktx create JPEG and NBPM input and scaling/resizing.
ktxsc encode ASTC encoding. This can be done in create.

The command-line syntax and semantics differ from the old tools including, but not limited to:

  • KTX 1.0 files are not supported by the new tools.

  • Words in multi-word option names are connected with - instead of _.

  • Individual option names may differ between the old and new tools.

  • The ktx validate tool may be stricter than ktx2check or otherwise differ in behavior, as the new tool enforces all rules of the KTX 2.0 specification. In addition, all new tools that accept KTX 2.0 files as input will be validated in a similar fashion as they would be with the ktx validate tool and will fail on the first specification rule violation, if there is one. It also has the option to output the validation results in human readable text format or in JSON format (both formatted and minified options are available), as controlled by the --format command-line option.

  • The ktx validate tool also supports validating KTX 2.0 files against the additional restrictions defined by the KHR_texture_basisu extension. Use the --gltf-basisu command-line option to verify glTF and WebGL compatibility.

  • The new ktx info tool produces a unified and complete output of all metadata in KTX 2.0 files and can provide output in human readable text format or in JSON format (both formatted and minified options are available), as controlled by the --format command-line option.

  • The source repository also includes the JSON schemas that the JSON outputs of the ktx info and ktx validate tools comply to.

  • The ktx create tool takes an explicit Vulkan format argument (--format) instead of inferring the format based on the provided input files as toktx, and thus doesn't perform any implicit color-space conversions except gamma 2.2 to sRGB. Use the --assign-oetf, --convert-oetf, --assign-primaries, and the new --convert-primaries for fine grained control over color-space interpretation and conversion.

  • The ktx create tool does not support resizing or scaling like toktx, and, in general, does not perform any image transformations except the optional color-space conversion and mipmap generation options. Users should resize input images to the appropriate resolution before converting them to KTX 2.0 files.

  • The ktx create and ktx extract tools consume and produce, respectively, image file formats that best suit the used Vulkan format. In general, barring special cases, 8-bit and 16-bit normalized integer formats are imported from and exported to PNG files, while integer and floating point formats are imported from and exported to EXR files based on predefined rules. This may be extended in the future using additional command line options and in response to support for other image file formats.

  • The new tools and updated libktx support ZLIB supercompression besides the BasisLZ and Zstd supercompression schemes supported previously.

Please refer to the manual pages or use the --help command-line option for further details on the options available and associated semantics for each individual command.

Changes

  • libktx has been made much more robust to errors KTX files.

  • libktx now validates checksums when present in a Zstd data stream.

  • libktx has two new error codes it can return: KTX_DECOMPRESS_LENGTH_ERROR and KTX_DECOMPRESS_CHECKSUM_ERROR.

Known Issues

  • Some image bits in output files encoded to ASTC, ETC1S/Basis-LZ or UASTC on arm64 devices may differ from those encoded from the same input images on x86_64 devices. The differences will not be human visible and will only show up in bit-exact comparisons.

  • Users making Basis Universal encoded or GPU block compressed textures for WebGL must be aware of WebGL restrictions with regard to texture size and may need to resize input images appropriately before using the ktx create tool, or use the --resize feature of the old toktx tool to produce an appropriately sized texture. In general, the dimensions of block compressed textures must be a multiple of the block size in WebGL and for WebGL 1.0 textures must have power-of-two dimensions. Additional portability restrictions apply for glTF per the KHR_texture_basisu extension which can be verified using the --gltf-basisu command-line option of the new ktx validate tool.

  • Basis Universal encoding results (both ETC1S/LZ and UASTC) are non-deterministic across platforms. Results are valid but level sizes and data will differ slightly. See issue #60 in the basis_universal repository.

  • UASTC RDO results differ from run to run unless multi-threading or RDO multi-threading is disabled. In toktx use --threads 1 for the former or --uastc_rdo_m for the latter. As with the preceeding issue results are valid but level sizes will differ slightly. See issue #151 in the basis_universal repository.

  • Neither the Vulkan nor GL loaders support depth/stencil textures.

Changes since v4.2.0 (by part)

libktx

  • Merge ktxtools into main (#714) (a6abf2ff) (@VaderY)

Tools

  • Merge ktxtools into main (#714) (a6abf2ff) (@VaderY)

JS Wrappers

  • Merge ktxtools into main (#714) (a6abf2ff) (@VaderY)

Java Wrapper

  • Merge ktxtools into main (#714) (a6abf2ff) (@VaderY)

v4.2.1

1 year ago

Changes since v4.2.0 (by part)

libktx

  • Fix memory leak of input_image in ktxTexture2_CompressAstcEx (fa1fe4d7) (@null)

Version 4.2.0

Overview

v4.2.0 has few user-facing changes. Most of the work has been behind the scenes improving the build system and fixing warnings across the many supported compilers. User-facing changes are detailed below.

New Features in v4.2.0

  • Install packages for GNU/Linux on Arm64 have been added.

  • The Java wrapper is now included in the Windows Arm64 install package.

Significant Changes since v4.1.0

  • The following behavioral changes have been made to toktx:

    • If the input PNG file has a gAMA chunk with a value 45460 the image data is now converted to the sRGB transfer function intead of just assigning sRGB as the transfer function of the output file.
    • If the gAMA chunk has a value other than 45640 or 100000 toktx will now exit with an error. Previously it used heuristics to decide whether to transform the input to linear or sRGB. Use --convert_oetf or --assign_oetf to specified the desired behavior.
  • The Khronos Data Format header file KHR/khr_df.h has been added to the install packages and is included in ktx.h. A new transfer function query ktxTexture2_GetOETF_e that returns a khr_df_transfer_e replaces ktxTexture2_GetOETF that returned a ktx_uint32_t. The latter is still available for backward compatibility, A new ktxTexture2_GetColorModel_e query has been added returning a khr_df_model_e.

Known Issues in v4.2.0.

  • Some image bits in output files encoded to ASTC, ETC1S/Basis-LZ or UASTC on arm64 devices may differ from those encoded from the same input images on x86_64 devices. The differences will not be human visible and will only show up in bit-exact comparisons.

  • toktx will not read JPEG files with a width or height > 32768 pixels.

  • toktx will not read 4-component JPEG files such as those sometimes created by Adobe software where the 4th component can be used to re-create a CMYK image.

  • Users making Basisu encoded or block compressed textures for WebGL must be aware of WebGL restrictions with regard to texture size and may need to resize images appropriately using the --resize feature of toktx. In general the dimensions of block compressed textures must be a multiple of the block size and for WebGL 1.0 must be a power of 2. For portability glTF's KHR_texture_basisu extension requires texture dimensions to be a multiple of 4, the block size of the Universal texture formats.

  • Basis Universal encoding results (both ETC1S/LZ and UASTC) are non-deterministic across platforms. Results are valid but level sizes and data will differ slightly. See issue #60 in the basis_universal repository.

  • UASTC RDO results differ from run to run unless multi-threading or RDO multi-threading is disabled. In toktx use --threads 1 for the former or --uastc_rdo_m for the latter. As with the preceeding issue results are valid but level sizes will differ slightly. See issue #151 in the basis_universal repository.

  • Neither the Vulkan nor GL loaders support depth/stencil textures.

Notice

  • Building with Visual Studio 2015 and 2017 is no longer supported.

Changes since v4.1.0 (by part)

libktx

  • Pull upstream ASTC encoder for FP option setting fixes. (#713) (8e68fe04) (@MarkCallow)

  • Pull upstream ASTC for fixes building with GCC 11 for arm64, (#700) (514051ca) (@MarkCallow)

  • Update Vulkan SDK for macOS CI. (#688) (f57dc8fa) (@MarkCallow)

  • CI and Build Improvements (#687) (38f48586) (@MarkCallow)

Tools

  • Pull upstream ASTC for fixes building with GCC 11 for arm64, (#700) (514051ca) (@MarkCallow)

  • Reimplement image input handling for toktx. (#702) (1646c4d0) (@MarkCallow)

  • Fix normalization when the result overflows (#701) (f81330b5) (@wasimabbas-arm)

Java Wrapper

  • Fix outdated references to master. (e724f180) (@MarkCallow)

  • Miscellaneous CI script and build fixes (#692) (fefd4a65) (@MarkCallow)

  • Remove pinned buffer list in JNI wrapper to avoid segmentation faults (#697) (9b084d50) (@ShukantPal)

v4.3.0-alpha1

1 year ago

New Features

v4.3.0 contains a new suite of command line tools accessed via an umbrella ktx command.

Tool Description Equivalent old tool
ktx create Create a KTX2 file from various input files toktx
ktx extract Export selected images from a KTX2 file -
ktx encode Encode a KTX2 file ktxsc
ktx transcode Transcode a KTX2 file -
ktx info Prints information about a KTX2 file ktxinfo
ktx validate Validate a KTX2 file ktx2check
ktx help Display help information about the ktx tools -

Equivalent old tools will be removed in the next release.

Some features of the old tools are not currently available in the new equivalent.

Old Tool New Tool Missing Features
toktx create JPEG and NBPM input and scaling/resizing.
ktxsc encode ASTC encoding. This can be done in create.

The command-line syntax and semantics differ from the old tools including, but not limited to:

  • KTX 1.0 files are not supported by the new tools.

  • Words in multi-word option names are connected with - instead of _.

  • Individual option names may differ between the old and new tools.

  • The ktx validate tool may be stricter than ktx2check or otherwise differ in behavior, as the new tool enforces all rules of the KTX 2.0 specification. In addition, all new tools that accept KTX 2.0 files as input will be validated in a similar fashion as they would be with the ktx validate tool and will fail on the first specification rule violation, if there is one. It also has the option to output the validation results in human readable text format or in JSON format (both formatted and minified options are available), as controlled by the --format command-line option.

  • The ktx validate tool also supports validating KTX 2.0 files against the additional restrictions defined by the KHR_texture_basisu extension. Use the --gltf-basisu command-line option to verify glTF and WebGL compatibility.

  • The new ktx info tool produces a unified and complete output of all metadata in KTX 2.0 files and can provide output in human readable text format or in JSON format (both formatted and minified options are available), as controlled by the --format command-line option.

  • The source repository also includes the JSON schemas that the JSON outputs of the ktx info and ktx validate tools comply to.

  • The ktx create tool takes an explicit Vulkan format argument (--format) instead of inferring the format based on the provided input files as toktx, and thus doesn't perform any implicit color-space conversions except gamma 2.2 to sRGB. Use the --assign-oetf, --convert-oetf, --assign-primaries, and the new --convert-primaries for fine grained control over color-space interpretation and conversion.

  • The ktx create tool does not support resizing or scaling like toktx, and, in general, does not perform any image transformations except the optional color-space conversion and mipmap generation options. Users should resize input images to the appropriate resolution before converting them to KTX 2.0 files.

  • The ktx create and ktx extract tools consume and produce, respectively, image file formats that best suit the used Vulkan format. In general, barring special cases, 8-bit and 16-bit normalized integer formats are imported from and exported to PNG files, while integer and floating point formats are imported from and exported to EXR files based on predefined rules. This may be extended in the future using additional command line options and in response to support for other image file formats.

  • The new tools and updated libktx support ZLIB supercompression besides the BasisLZ and Zstd supercompression schemes supported previously.

Please refer to the manual pages or use the --help command-line option for further details on the options available and associated semantics for each individual command.

Changes

  • libktx has been made much more robust to errors KTX files.

  • libktx now validates checksums when present in a Zstd data stream.

  • libktx has two new error codes it can return: KTX_DECOMPRESS_LENGTH_ERROR and KTX_DECOMPRESS_CHECKSUM_ERROR.

Known Issues

  • Some image bits in output files encoded to ASTC, ETC1S/Basis-LZ or UASTC on arm64 devices may differ from those encoded from the same input images on x86_64 devices. The differences will not be human visible and will only show up in bit-exact comparisons.

  • Users making Basis Universal encoded or GPU block compressed textures for WebGL must be aware of WebGL restrictions with regard to texture size and may need to resize input images appropriately before using the ktx create tool, or use the --resize feature of the old toktx tool to produce an appropriately sized texture. In general, the dimensions of block compressed textures must be a multiple of the block size in WebGL and for WebGL 1.0 textures must have power-of-two dimensions. Additional portability restrictions apply for glTF per the KHR_texture_basisu extension which can be verified using the --gltf-basisu command-line option of the new ktx validate tool.

  • Basis Universal encoding results (both ETC1S/LZ and UASTC) are non-deterministic across platforms. Results are valid but level sizes and data will differ slightly. See issue #60 in the basis_universal repository.

  • UASTC RDO results differ from run to run unless multi-threading or RDO multi-threading is disabled. In toktx use --threads 1 for the former or --uastc_rdo_m for the latter. As with the preceeding issue results are valid but level sizes will differ slightly. See issue #151 in the basis_universal repository.

  • Neither the Vulkan nor GL loaders support depth/stencil textures.

Changes since v4.2.0 (by part)

libktx

  • Merge ktxtools into main (#714) (a6abf2ff) (@VaderY)

Tools

  • Merge ktxtools into main (#714) (a6abf2ff) (@VaderY)

JS Wrappers

  • Merge ktxtools into main (#714) (a6abf2ff) (@VaderY)

Java Wrapper

  • Merge ktxtools into main (#714) (a6abf2ff) (@VaderY)

v4.2.0

1 year ago

Overview

v4.2.0 has few user-facing changes. Most of the work has been behind the scenes improving the build system and fixing warnings across the many supported compilers. User-facing changes are detailed below.

New Features in v4.2.0

  • Install packages for GNU/Linux on Arm64 have been added.

  • The Java wrapper is now included in the Windows Arm64 install package.

Significant Changes since v4.1.0

  • The following behavioral changes have been made to toktx:

    • If the input PNG file has a gAMA chunk with a value 45460 the image data is now converted to the sRGB transfer function intead of just assigning sRGB as the transfer function of the output file.
    • If the gAMA chunk has a value other than 45640 or 100000 toktx will now exit with an error. Previously it used heuristics to decide whether to transform the input to linear or sRGB. Use --convert_oetf or --assign_oetf to specified the desired behavior.
  • The Khronos Data Format header file KHR/khr_df.h has been added to the install packages and is included in ktx.h. A new transfer function query ktxTexture2_GetOETF_e that returns a khr_df_transfer_e replaces ktxTexture2_GetOETF that returned a ktx_uint32_t. The latter is still available for backward compatibility, A new ktxTexture2_GetColorModel_e query has been added returning a khr_df_model_e.

Known Issues in v4.2.0.

  • Some image bits in output files encoded to ASTC, ETC1S/Basis-LZ or UASTC on arm64 devices may differ from those encoded from the same input images on x86_64 devices. The differences will not be human visible and will only show up in bit-exact comparisons.

  • toktx will not read JPEG files with a width or height > 32768 pixels.

  • toktx will not read 4-component JPEG files such as those sometimes created by Adobe software where the 4th component can be used to re-create a CMYK image.

  • Users making Basisu encoded or block compressed textures for WebGL must be aware of WebGL restrictions with regard to texture size and may need to resize images appropriately using the --resize feature of toktx. In general the dimensions of block compressed textures must be a multiple of the block size and for WebGL 1.0 must be a power of 2. For portability glTF's KHR_texture_basisu extension requires texture dimensions to be a multiple of 4, the block size of the Universal texture formats.

  • Basis Universal encoding results (both ETC1S/LZ and UASTC) are non-deterministic across platforms. Results are valid but level sizes and data will differ slightly. See issue #60 in the basis_universal repository.

  • UASTC RDO results differ from run to run unless multi-threading or RDO multi-threading is disabled. In toktx use --threads 1 for the former or --uastc_rdo_m for the latter. As with the preceeding issue results are valid but level sizes will differ slightly. See issue #151 in the basis_universal repository.

  • Neither the Vulkan nor GL loaders support depth/stencil textures.

Notice

  • Building with Visual Studio 2015 and 2017 is no longer supported.

Changes since v4.1.0 (by part)

libktx

  • Pull upstream ASTC encoder for FP option setting fixes. (#713) (8e68fe04) (@MarkCallow)

  • Pull upstream ASTC for fixes building with GCC 11 for arm64, (#700) (514051ca) (@MarkCallow)

  • Update Vulkan SDK for macOS CI. (#688) (f57dc8fa) (@MarkCallow)

  • CI and Build Improvements (#687) (38f48586) (@MarkCallow)

Tools

  • Pull upstream ASTC for fixes building with GCC 11 for arm64, (#700) (514051ca) (@MarkCallow)

  • Reimplement image input handling for toktx. (#702) (1646c4d0) (@MarkCallow)

  • Fix normalization when the result overflows (#701) (f81330b5) (@wasimabbas-arm)

Java Wrapper

  • Fix outdated references to master. (e724f180) (@MarkCallow)

  • Miscellaneous CI script and build fixes (#692) (fefd4a65) (@MarkCallow)

  • Remove pinned buffer list in JNI wrapper to avoid segmentation faults (#697) (9b084d50) (@ShukantPal)

v4.1.0

1 year ago

New Features in v4.1.0

  • ARM's ASTC encoder has been added to libktx. As a result you can now use toktx to create KTX files with ASTC encoded payloads. Thanks to @wasimabbas-arm.

  • Full normal map handling has been added. 3-component normal maps can be converted to 2-component and the components separated into the RGB and alpha channels of ASTC, ETC1S or UASTC compressed textures. A --normalize option has been added to toktx to convert an input normal map to unit normals which are needed to allow the third component to be recreated in a shader. Thanks to @wasimabbas-arm.

  • A Java wrapper and JNI module for libktx has been added. Thanks to @ShukantPal.

  • An install package for Apple Silicon has been added.

  • An install package for Windows Arm-64 has been added. Thanks to @Honeybunch.

  • The formerly internal ktxStream class has been exposed enabling possibilities such as wrapping a ktxStream around a C++ stream so that textures can be created from the C++ stream's content. See sbufstream.h. Thanks to @UberLambda.

  • ktx2check now verifies BasisLZ supercompression data by performing a transcode.

Significant Changes since v4.0.0

  • Basis Universal has been updated to version 1.16.3.

    • The ETC1S encoder performance is now approximately 30% faster.
    • Optional OpenCL support has been added to the ETC1S encoder. Add -D SUPPORT_OPENCL when configuring the CMake build to enable it. As OpenCL may not be any faster when encoding individual files - it highly depends on your hardware - it is disabled in the default build and release packages.
  • Windows install packages are now signed with an Extended Validation certificate eliminating scary warnings when starting installation.

  • Textures with Depth-stencil formats are now created with DFDs and alignments matching the KTX v2 specification.

  • Specifying --layers 1 to toktx now creates an array texture with 1 layer. Previously it created a non-array texture.

  • Specifying --depth 1 to toktx now creates a 3d texture with depth of 1. Previously it created a 2d texture.

  • --normal_map in ktxsc and toktx has been replaced by --normal_mode which converts 3-component maps to 2-component as well as optimizing the encoding. To prevent the conversion, also specify --input_swizzle rgb1.

Known Issues in v4.1.0.

  • toktx will not read JPEG files with a width or height > 32768 pixels.

  • toktx will not read 4-component JPEG files such as those sometimes created by Adobe software where the 4th component can be used to re-create a CMYK image.

  • Users making Basisu encoded or block compressed textures for WebGL must be aware of WebGL restrictions with regard to texture size and may need to resize images appropriately using the --resize feature of toktx. In general the dimensions of block compressed textures must be a multiple of the block size and for WebGL 1.0 must be a power of 2. For portability glTF's KHR_texture_basisu extension requires texture dimensions to be a multiple of 4, the block size of the Universal texture formats.

  • Basis Universal encoding results (both ETC1S/LZ and UASTC) are non-deterministic across platforms. Results are valid but level sizes and data will differ slightly. See issue #60 in the basis_universal repository.

  • UASTC RDO results differ from run to run unless multi-threading or RDO multi-threading is disabled. In toktx use --threads 1 for the former or --uastc_rdo_m for the latter. As with the preceeding issue results are valid but level sizes will differ slightly. See issue #151 in the basis_universal repository.

  • Neither the Vulkan nor GL loaders support depth/stencil textures.

Notice

  • Following this release Visual Studio 2015 and 2017 will no longer be supported. The CI builds with these will be disabled. You may still be able to build with these for a while but don't rely on it.

Changes since v4.0.0 (by part)

libktx

  • Fix warnings newly raised by Doxygen 1.9.6. (#676) (c5c24a44) (@MarkCallow)

  • Fix new warnings from Xcode 14.2 building for macOS. (#659) (a5bbfe75) (@MarkCallow)

  • fix typo in lib/info.c (#657) (784ed9ac) (@simi)

  • Fix mingw-w64:llvm-mingw error: unknown type name 'pthread_t' (#653) (7d576397) (@FuXiii)

  • Include padding in inflatedByteLength (#647) (a64ebd4f) (@MarkCallow)

  • Fixing support for mingw toolchains that target the newer ucrt (#642) (02513772) (@Honeybunch)

  • Document required queue properties. Fixes #627. (#639) (f4feff2a) (@MarkCallow)

  • Fix ktxTexture_VkUpload documentation. (691e9ca3) (@MarkCallow)

  • Fix: Use time.h not timex.h for __GNUC__ (a0b18062) (@MarkCallow)

  • Fix gcc warnings in appendLibId. (#626) (895799d6) (@MarkCallow)

  • Fix warnings in appendLibId. (#625) (9bd2f9bb) (@MarkCallow)

  • Cherry-pick change from astcenc 4.1.0 (#623) (f8dc35f0) (@solidpixel)

  • Check for existing libktx version string (#620) (a2f1ac25) (@MarkCallow)

  • Set isCompressed at end of CompressBasisEx. (#618) (c63b4c9d) (@MarkCallow)

  • Allow creation of 3d textures with --depth 1. (#610) (3a5d09ac) (@MarkCallow)

  • Fix newly emerged warning from clang (#608) (cd394d6d) (@MarkCallow)

  • Update for UASTC and ASTC. (727de5e8) (@MarkCallow)

  • git subrepo push lib/dfdutils (dd799a9b) (@MarkCallow)

  • Remove incorrect use of ktxTexture2_WriteTo... (7d91d62e) (@MarkCallow)

  • Regularize Tools (#594) (870b9fff) (@MarkCallow)

  • Fixing build for arm64 Windows (#582) (b995ac33) (@Honeybunch)

  • Update astc-encoder (#592) (a6bcd33d) (@MarkCallow)

  • Fix missing documentation and compile warning. (#591) (ed9e7253) (@MarkCallow)

  • Update astc encoder (#586) (1cb97511) (@MarkCallow)

  • Release memory before early exit. (#584) (a4fddf6b) (@kacprzak)

  • Introduce proper vulkan initialization (#570) (bb9babcb) (@rHermes)

  • Using cmake's MINGW variable to detect proper ABI (#579) (a70e831e) (@Honeybunch)

  • Fix handling of combined depth-stencil textures (#575) (e4bf1aaa) (@MarkCallow)

  • Fix build on Mingw (#574) (1f07cb07) (@Honeybunch)

  • Prepare Release 4.1. (#571) (4a52fe45) (@MarkCallow)

  • git subrepo pull (merge) lib/astc-encoder (51f47631) (@MarkCallow)

  • git subrepo pull (merge) lib/dfdutils (7c24a986) (@MarkCallow)

  • git subrepo pull (merge) lib/dfdutils (c5abc161) (@MarkCallow)

  • Farewell GYP. :-( (f1f04a7e) (@MarkCallow)

  • Miscellaneous fixes (#558) (66f6d750) (@MarkCallow)

  • Fix new in clang 13.1 (Xcode13.3) warnings (#553) (b8d462b0) (@MarkCallow)

  • Fix non-clang warnings (#549) (4e7e40a0) (@MarkCallow)

  • Split each build configuration into a separate CI job. (#546) (9d1204cc) (@MarkCallow)

  • Update to Basis1.16.3 (#543) (c65cfd0d) (@MarkCallow)

  • Remove image.hpp dependency (#542) (9fde96b9) (@wasimabbas-arm)

  • Update to Basis 1.16.1 (#541) (cb45eadc) (@MarkCallow)

  • git subrepo pull (merge) lib/astc-encoder (#540) (d98aa680) (@wasimabbas-arm)

  • git subrepo pull (merge) lib/astc-encoder (#537) (dbfeb82a) (@wasimabbas-arm)

  • Add astc perceptual mode support (#534) (57e62de1) (@wasimabbas-arm)

  • Improve Astc & BasisU normal map support (#493) (2d6ff949) (@wasimabbas-arm)

  • git subrepo pull lib/dfdutils (5ff4811c) (@MarkCallow)

  • git subrepo push lib/dfdutils (ce2a4619) (@MarkCallow)

  • Calculate dst buffer size with ZSTD_compressBound. (#527) (81d2be5c) (@MarkCallow)

  • Remove extraneous token concatenation operator. (a8f4a71d) (@MarkCallow)

  • Fix malloc/delete pair. (0a3fe5b1) (@sergeyext)

  • Manually update git-subrepo parent (929c75c3) (@wasimabbas-arm)

  • git subrepo pull (merge) lib/astc-encoder (f5daffea) (@wasimabbas-arm)

  • Fix parent commit pointer. (1a356d0e) (@MarkCallow)

  • git subrepo pull (merge) lib/basisu (24c9f7bb) (@MarkCallow)

  • Move common params out from ETC1S case. (a2ccc90e) (@MarkCallow)

  • Remove transferFunction from astc options (#482) (1f085d30) (@wasimabbas-arm)

  • Fix leak in zstd inflation. Fixes #465. (720b6cf3) (@MarkCallow)

  • Support array and 3d textures. (#468) (b0532530) (@MarkCallow)

  • Add more astc tests (#460) (14284e7d) (@wasimabbas-arm)

  • Add astc support (#433) (da435dee) (@wasimabbas-arm)

  • Actually byte swap keyAndValueByteSize values. Fix issue #447. (00118086) (@MarkCallow)

  • Add KTXmetalPixelFormat to valid list used by ktxTexture2_WriteToStream. (871f111d) (@MarkCallow)

  • Fix astc-encoder/.gitrepo parent after latest pull. (f99221eb) (@MarkCallow)

  • git subrepo pull (merge) lib/astc-encoder (66692454) (@MarkCallow)

  • Fix astc-encoder/.gitrepo parent pointer. (f39b13b1) (@MarkCallow)

  • Fix memory leak in VkUpload (#448) (2b2b48fa) (@bin)

  • Fix: if ("GL_EXT_texture_sRGB") is supported,then srgb should be supported (#446) (13f17410) (@dusthand)

  • git subrepo commit (merge) lib/astc-encoder (1264f867) (@MarkCallow)

  • git subrepo pull (merge) lib/astc-encoder (15369663) (@MarkCallow)

  • Make ktxStream public (#438) (78929f80) (@UberLambda)

  • git subrepo pull (merge) lib/astc-encoder (535c883b) (@MarkCallow)

  • Fix mismatched malloc and delete (#440) (9d42b86f) (@cperthuisoc)

  • Cleanup Vulkan SDK environment variables. (354f640e) (@MarkCallow)

  • git subrepo pull (merge) lib/astc-encoder (3e75b6a3) (@MarkCallow)

  • Remove unneeded parts of astc-encoder. (360d10bb) (@MarkCallow)

  • git subrepo clone https://github.com/ARM-software/astc-encoder.git lib/astc-encoder (db359593) (@MarkCallow)

  • Raise warning levels to /W4 & -Wall -Wextra (#418) (ca6f6e7d) (@MarkCallow)

  • Minor build tweaks (#407) (6a38a069) (@MarkCallow)

Tools

  • Fix ktx2check handling of supercompressed files. (#646) (0057c761) (@MarkCallow)

  • Fix: Remove incorrect stdin-use documentation. (b67688ee) (@MarkCallow)

  • Allow creation of 3d textures with --depth 1. (#610) (3a5d09ac) (@MarkCallow)

  • Fix newly emerged warning from clang (#608) (cd394d6d) (@MarkCallow)

  • Build-system fixes (#606) (48bb42b0) (@pierremoreau)

  • Allow creation of single layer array textures. (#602) (de93656b) (@MarkCallow)

  • Close file after successful load (#597) (32d26662) (@AndrewChan2022)

  • Regularize Tools (#594) (870b9fff) (@MarkCallow)

  • Fix cross-device rename failure (#593) (f020c1ba) (@MarkCallow)

  • Fix wrong alignment used when checking VK_FORMAT_UNDEFINED files (#585) (c7e4edc7) (@MarkCallow)

  • Sign Windows executables, dlls and NSIS installers. (#583) (dc231b32) (@MarkCallow)

  • Fix broken bytesPlane0 test. Add extra analysis. (#578) (243ba439) (@MarkCallow)

  • Fix handling of combined depth-stencil textures (#575) (e4bf1aaa) (@MarkCallow)

  • Farewell GYP. :-( (f1f04a7e) (@MarkCallow)

  • Miscellaneous fixes (#558) (66f6d750) (@MarkCallow)

  • Add JNI component and integrate Java build & test with CMake (#556) (e29e0996) (@MarkCallow)

  • Fix non-clang warnings (#549) (4e7e40a0) (@MarkCallow)

  • Fix VS warnings (#544) (8c6b3571) (@wasimabbas-arm)

  • Remove image.hpp dependency (#542) (9fde96b9) (@wasimabbas-arm)

  • Update to Basis 1.16.1 (#541) (cb45eadc) (@MarkCallow)

  • Improve Astc & BasisU normal map support (#493) (2d6ff949) (@wasimabbas-arm)

  • Validate BasisU Transcode (#532) (39e2d96e) (@MarkCallow)

  • Fix mismatched errors for required and optional index entries. (b8786496) (@MarkCallow)

  • fix missing -w flag for ktx2check (eade072d) (@sidsethupathi)

  • Remove transferFunction from astc options (#482) (1f085d30) (@wasimabbas-arm)

  • Ensure NUL on end of 3d orientation. (74501ef3) (@MarkCallow)

  • Support array and 3d textures. (#468) (b0532530) (@MarkCallow)

  • Fix checks for mismatched image attributes. (#466) (4eca0ef3) (@MarkCallow)

  • Add more astc tests (#460) (14284e7d) (@wasimabbas-arm)

  • Add astc support (#433) (da435dee) (@wasimabbas-arm)

  • macOS Apple Silicon support (#415) (ebab2ea8) (@atteneder)

  • Raise warning levels to /W4 & -Wall -Wextra (#418) (ca6f6e7d) (@MarkCallow)

  • Fix validation errors (#417) (78cd2b01) (@MarkCallow)

JS Wrappers

  • Farewell GYP. :-( (f1f04a7e) (@MarkCallow)

  • Update to Basis 1.16.1 (#541) (cb45eadc) (@MarkCallow)

  • Raise warning levels to /W4 & -Wall -Wextra (#418) (ca6f6e7d) (@MarkCallow)

Java Wrapper

  • When finding JNI don't request non-existent component. (48b455cc) (@MarkCallow)

  • [FIX] Fix jni package names in KtxTexture2.cpp (#621) (758fc864) (@Illithidek)

  • Set isCompressed at end of CompressBasisEx. (#618) (c63b4c9d) (@MarkCallow)

  • Sign Windows executables, dlls and NSIS installers. (#583) (dc231b32) (@MarkCallow)

  • Workaround FindJNI searching for framework when JAVA_HOME not set. (#566) (957a198b) (@MarkCallow)

  • Miscellaneous fixes (#558) (66f6d750) (@MarkCallow)

  • Add JNI component and integrate Java build & test with CMake (#556) (e29e0996) (@MarkCallow)

  • Fix warnings in JNI library and update to latest libktx API. (#548) (6f98b3c4) (@ShukantPal)

  • Update to Basis 1.16.1 (#541) (cb45eadc) (@MarkCallow)

  • Feature: Java bindings for libktx (#481) (a7159924) (@ShukantPal)

v4.1.0-rc3

1 year ago

New Features in v4.1.0

  • ARM's ASTC encoder has been added to libktx. As a result you can now use toktx to create KTX files with ASTC encoded payloads. Thanks to @wasimabbas-arm.

  • Full normal map handling has been added. 3-component normal maps can be converted to 2-component and the components separated into the RGB and alpha channels of ASTC, ETC1S or UASTC compressed textures. A --normalize option has been added to toktx to convert an input normal map to unit normals which are needed to allow the third component to be recreated in a shader. Thanks to @wasimabbas-arm.

  • A Java wrapper and JNI module for libktx has been added. Thanks to @ShukantPal.

  • An install package for Apple Silicon has been added.

  • An install package for Windows Arm-64 has been added. Thanks to @Honeybunch.

  • The formerly internal ktxStream class has been exposed enabling possibilities such as wrapping a ktxStream around a C++ stream so that textures can be created from the C++ stream's content. See sbufstream.h. Thanks to @UberLambda.

  • ktx2check now verifies BasisLZ supercompression data by performing a transcode.

Significant Changes since v4.0.0

  • Basis Universal has been updated to version 1.16.3.

    • The ETC1S encoder performance is now approximately 30% faster.
    • Optional OpenCL support has been added to the ETC1S encoder. Add -D SUPPORT_OPENCL when configuring the CMake build to enable it. As OpenCL may not be any faster when encoding individual files - it highly depends on your hardware - it is disabled in the default build and release packages.
  • Windows install packages are now signed.

  • Textures with Depth-stencil formats are now created with DFDs and alignments matching the KTX v2 specification.

  • Specifying --layers 1 to toktx now creates an array texture with 1 layer. Previously it created a non-array texture.

  • Specifying --depth 1 to toktx now creates a 3d texture with depth of 1. Previously it created a 2d texture.

  • --normal_map in ktxsc and toktx has been replaced by --normal_mode which converts 3-component maps to 2-component as well as optimizing the encoding. To prevent the conversion, also specify --input_swizzle rgb1.

Known Issues in v4.1.0.

  • toktx will not read JPEG files with a width or height > 32768 pixels.

  • toktx will not read 4-component JPEG files such as those sometimes created by Adobe software where the 4th component can be used to re-create a CMYK image.

  • Users making Basisu encoded or block compressed textures for WebGL must be aware of WebGL restrictions with regard to texture size and may need to resize images appropriately using the --resize feature of toktx. In general the dimensions of block compressed textures must be a multiple of the block size and for WebGL 1.0 must be a power of 2. For portability glTF's KHR_texture_basisu extension requires texture dimensions to be a multiple of 4, the block size of the Universal texture formats.

  • Basis Universal encoding results (both ETC1S/LZ and UASTC) are non-deterministic across platforms. Results are valid but level sizes and data will differ slightly. See issue #60 in the basis_universal repository.

  • UASTC RDO results differ from run to run unless multi-threading or RDO multi-threading is disabled. In toktx use --threads 1 for the former or --uastc_rdo_m for the latter. As with the preceeding issue results are valid but level sizes will differ slightly. See issue #151 in the basis_universal repository.

  • Neither the Vulkan nor GL loaders support depth/stencil textures.

Notice

  • This is the last release for which building with Visual Studio 2015 is supported. You may still be able to build with it for a while but don't rely on it.

Changes since v4.0.0 (by part)

libktx

  • Check for existing libktx version string (#620) (a2f1ac25) (@MarkCallow)

  • Set isCompressed at end of CompressBasisEx. (#618) (c63b4c9d) (@MarkCallow)

  • Allow creation of 3d textures with --depth 1. (#610) (3a5d09ac) (@MarkCallow)

  • Fix newly emerged warning from clang (#608) (cd394d6d) (@MarkCallow)

  • Update for UASTC and ASTC. (727de5e8) (@MarkCallow)

  • git subrepo push lib/dfdutils (dd799a9b) (@MarkCallow)

  • Remove incorrect use of ktxTexture2_WriteTo... (7d91d62e) (@MarkCallow)

  • Regularize Tools (#594) (870b9fff) (@MarkCallow)

  • Fixing build for arm64 Windows (#582) (b995ac33) (@Honeybunch)

  • Update astc-encoder (#592) (a6bcd33d) (@MarkCallow)

  • Fix missing documentation and compile warning. (#591) (ed9e7253) (@MarkCallow)

  • Update astc encoder (#586) (1cb97511) (@MarkCallow)

  • Release memory before early exit. (#584) (a4fddf6b) (@kacprzak)

  • Introduce proper vulkan initialization (#570) (bb9babcb) (@rHermes)

  • Using cmake's MINGW variable to detect proper ABI (#579) (a70e831e) (@Honeybunch)

  • Fix handling of combined depth-stencil textures (#575) (e4bf1aaa) (@MarkCallow)

  • Fix build on Mingw (#574) (1f07cb07) (@Honeybunch)

  • Prepare Release 4.1. (#571) (4a52fe45) (@MarkCallow)

  • git subrepo pull (merge) lib/astc-encoder (51f47631) (@MarkCallow)

  • git subrepo pull (merge) lib/dfdutils (7c24a986) (@MarkCallow)

  • git subrepo pull (merge) lib/dfdutils (c5abc161) (@MarkCallow)

  • Farewell GYP. :-( (f1f04a7e) (@MarkCallow)

  • Miscellaneous fixes (#558) (66f6d750) (@MarkCallow)

  • Fix new in clang 13.1 (Xcode13.3) warnings (#553) (b8d462b0) (@MarkCallow)

  • Fix non-clang warnings (#549) (4e7e40a0) (@MarkCallow)

  • Split each build configuration into a separate CI job. (#546) (9d1204cc) (@MarkCallow)

  • Update to Basis1.16.3 (#543) (c65cfd0d) (@MarkCallow)

  • Remove image.hpp dependency (#542) (9fde96b9) (@wasimabbas-arm)

  • Update to Basis 1.16.1 (#541) (cb45eadc) (@MarkCallow)

  • git subrepo pull (merge) lib/astc-encoder (#540) (d98aa680) (@wasimabbas-arm)

  • git subrepo pull (merge) lib/astc-encoder (#537) (dbfeb82a) (@wasimabbas-arm)

  • Add astc perceptual mode support (#534) (57e62de1) (@wasimabbas-arm)

  • Improve Astc & BasisU normal map support (#493) (2d6ff949) (@wasimabbas-arm)

  • git subrepo pull lib/dfdutils (5ff4811c) (@MarkCallow)

  • git subrepo push lib/dfdutils (ce2a4619) (@MarkCallow)

  • Calculate dst buffer size with ZSTD_compressBound. (#527) (81d2be5c) (@MarkCallow)

  • Remove extraneous token concatenation operator. (a8f4a71d) (@MarkCallow)

  • Fix malloc/delete pair. (0a3fe5b1) (@sergeyext)

  • Manually update git-subrepo parent (929c75c3) (@wasimabbas-arm)

  • git subrepo pull (merge) lib/astc-encoder (f5daffea) (@wasimabbas-arm)

  • Fix parent commit pointer. (1a356d0e) (@MarkCallow)

  • git subrepo pull (merge) lib/basisu (24c9f7bb) (@MarkCallow)

  • Move common params out from ETC1S case. (a2ccc90e) (@MarkCallow)

  • Remove transferFunction from astc options (#482) (1f085d30) (@wasimabbas-arm)

  • Fix leak in zstd inflation. Fixes #465. (720b6cf3) (@MarkCallow)

  • Support array and 3d textures. (#468) (b0532530) (@MarkCallow)

  • Add more astc tests (#460) (14284e7d) (@wasimabbas-arm)

  • Add astc support (#433) (da435dee) (@wasimabbas-arm)

  • Actually byte swap keyAndValueByteSize values. Fix issue #447. (00118086) (@MarkCallow)

  • Add KTXmetalPixelFormat to valid list used by ktxTexture2_WriteToStream. (871f111d) (@MarkCallow)

  • Fix astc-encoder/.gitrepo parent after latest pull. (f99221eb) (@MarkCallow)

  • git subrepo pull (merge) lib/astc-encoder (66692454) (@MarkCallow)

  • Fix astc-encoder/.gitrepo parent pointer. (f39b13b1) (@MarkCallow)

  • Fix memory leak in VkUpload (#448) (2b2b48fa) (@bin)

  • Fix: if ("GL_EXT_texture_sRGB") is supported,then srgb should be supported (#446) (13f17410) (@dusthand)

  • git subrepo commit (merge) lib/astc-encoder (1264f867) (@MarkCallow)

  • git subrepo pull (merge) lib/astc-encoder (15369663) (@MarkCallow)

  • Make ktxStream public (#438) (78929f80) (@UberLambda)

  • git subrepo pull (merge) lib/astc-encoder (535c883b) (@MarkCallow)

  • Fix mismatched malloc and delete (#440) (9d42b86f) (@cperthuisoc)

  • Cleanup Vulkan SDK environment variables. (354f640e) (@MarkCallow)

  • git subrepo pull (merge) lib/astc-encoder (3e75b6a3) (@MarkCallow)

  • Remove unneeded parts of astc-encoder. (360d10bb) (@MarkCallow)

  • git subrepo clone https://github.com/ARM-software/astc-encoder.git lib/astc-encoder (db359593) (@MarkCallow)

  • Raise warning levels to /W4 & -Wall -Wextra (#418) (ca6f6e7d) (@MarkCallow)

  • Minor build tweaks (#407) (6a38a069) (@MarkCallow)

Tools

  • Allow creation of 3d textures with --depth 1. (#610) (3a5d09ac) (@MarkCallow)

  • Fix newly emerged warning from clang (#608) (cd394d6d) (@MarkCallow)

  • Build-system fixes (#606) (48bb42b0) (@pierremoreau)

  • Allow creation of single layer array textures. (#602) (de93656b) (@MarkCallow)

  • Close file after successful load (#597) (32d26662) (@AndrewChan2022)

  • Regularize Tools (#594) (870b9fff) (@MarkCallow)

  • Fix cross-device rename failure (#593) (f020c1ba) (@MarkCallow)

  • Fix wrong alignment used when checking VK_FORMAT_UNDEFINED files (#585) (c7e4edc7) (@MarkCallow)

  • Sign Windows executables, dlls and NSIS installers. (#583) (dc231b32) (@MarkCallow)

  • Fix broken bytesPlane0 test. Add extra analysis. (#578) (243ba439) (@MarkCallow)

  • Fix handling of combined depth-stencil textures (#575) (e4bf1aaa) (@MarkCallow)

  • Farewell GYP. :-( (f1f04a7e) (@MarkCallow)

  • Miscellaneous fixes (#558) (66f6d750) (@MarkCallow)

  • Add JNI component and integrate Java build & test with CMake (#556) (e29e0996) (@MarkCallow)

  • Fix non-clang warnings (#549) (4e7e40a0) (@MarkCallow)

  • Fix VS warnings (#544) (8c6b3571) (@wasimabbas-arm)

  • Remove image.hpp dependency (#542) (9fde96b9) (@wasimabbas-arm)

  • Update to Basis 1.16.1 (#541) (cb45eadc) (@MarkCallow)

  • Improve Astc & BasisU normal map support (#493) (2d6ff949) (@wasimabbas-arm)

  • Validate BasisU Transcode (#532) (39e2d96e) (@MarkCallow)

  • Fix mismatched errors for required and optional index entries. (b8786496) (@MarkCallow)

  • fix missing -w flag for ktx2check (eade072d) (@sidsethupathi)

  • Remove transferFunction from astc options (#482) (1f085d30) (@wasimabbas-arm)

  • Ensure NUL on end of 3d orientation. (74501ef3) (@MarkCallow)

  • Support array and 3d textures. (#468) (b0532530) (@MarkCallow)

  • Fix checks for mismatched image attributes. (#466) (4eca0ef3) (@MarkCallow)

  • Add more astc tests (#460) (14284e7d) (@wasimabbas-arm)

  • Add astc support (#433) (da435dee) (@wasimabbas-arm)

  • macOS Apple Silicon support (#415) (ebab2ea8) (@atteneder)

  • Raise warning levels to /W4 & -Wall -Wextra (#418) (ca6f6e7d) (@MarkCallow)

  • Fix validation errors (#417) (78cd2b01) (@MarkCallow)

JS Wrappers

  • Farewell GYP. :-( (f1f04a7e) (@MarkCallow)

  • Update to Basis 1.16.1 (#541) (cb45eadc) (@MarkCallow)

  • Raise warning levels to /W4 & -Wall -Wextra (#418) (ca6f6e7d) (@MarkCallow)

Java Wrapper

  • [FIX] Fix jni package names in KtxTexture2.cpp (#621) (758fc864) (@Illithidek)

  • Set isCompressed at end of CompressBasisEx. (#618) (c63b4c9d) (@MarkCallow)

  • Sign Windows executables, dlls and NSIS installers. (#583) (dc231b32) (@MarkCallow)

  • Workaround FindJNI searching for framework when JAVA_HOME not set. (#566) (957a198b) (@MarkCallow)

  • Miscellaneous fixes (#558) (66f6d750) (@MarkCallow)

  • Add JNI component and integrate Java build & test with CMake (#556) (e29e0996) (@MarkCallow)

  • Fix warnings in JNI library and update to latest libktx API. (#548) (6f98b3c4) (@ShukantPal)

  • Update to Basis 1.16.1 (#541) (cb45eadc) (@MarkCallow)

  • Feature: Java bindings for libktx (#481) (a7159924) (@ShukantPal)