Skip to content

v4.1.0

Compare
Choose a tag to compare
@github-actions github-actions released this 09 Apr 04:40
v4.1.0

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

Tools

JS Wrappers

Java Wrapper