The KTX File Format and Tools

KTX (Khronos Texture) is a lightweight file format for OpenGL® textures, designed around how textures are loaded in OpenGL. KTX files contain all the parameters needed for texture loading. A single file can contain anything from a simple base-level 2D texture through to an array texture with all mipmap levels. Textures can be stored in any of the compressed formats supported by OpenGL family APIs and extensions or can be stored uncompressed. The latest versions of OpenGL and OpenGL ES include support for ETC2 and EAC compressed textures as a standard feature.

Format Specification

The file format specification was created by Khronos's OpenGL ES and ARB-OpenGL ES Convergence Working Groups and is applicable to both OpenGL and OpenGL ES.


libktx is an open source C library providing a set of functions for writing KTX files and for loading textures from them.


libktx is written using only Posix functions and is very portable. It includes both a GNU make file and a Visual Studio 2008 project file for building it.

Features of v2.0 Usage examples

The following example shows how to instantiate a texture using the library.

#define TEXTURE_FILE "../../../test images/up-reference.ktx"

    GLuint texture = 0;
    GLenum target;
    GLenum glerror;
    GLboolean isMipmapped;
    KTX_error_code ktxerror;

    ktxerror = ktxLoadTextureN(TEXTURE_FILE, &texture, &target, NULL, &isMipmapped, &glerror,
    	                       0, NULL);

    if (KTX_SUCCESS == ktxerror) {

        if (isMipmapped) 
            /* Enable bilinear mipmapping */
            glTexParameteri(target, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
            glTexParameteri(target, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
        glTexParameteri(target, GL_TEXTURE_MAG_FILTER, GL_LINEAR);



Most of the code is licensed under a modified BSD license. The code for unpacking ETC1, ETC2 and EAC compressed textures has a separate license that restricts it to uses associated with Khronos Group APIs. See the full license text for more details.

Working with KTX Files

Currently four tools are known to be available for creating KTX files:

Both etcpack & toktx use Netpbm, (.ppm, .pgm and .pam) files as source images. You can use freely available tools such as ImageMagick or XnView to convert most image formats to Netpbm formats.

etcpack is available from its GitHub repository.

The Adreno texture tool is included in the Adreno SDK which can be downloaded from the Adreno GPU Tools and Resources page.

PVRTexTool is one of the PowerVR Tools. Download the PowerVR Tools Installer, run it and select the tools you wish to download and install.

You can download the Mali Texture Compression Tool from the Mali Developer Center.

The source code for toktx is bundled with the libktx source, on which it is dependent, in the package available for download below. You can also download a Windows binary. Type toktx --help for usage.

You can use Pico Pixel for viewing KTX files & more and for debugging image handling in your applications.


The downloads below are very outdated. Clone the GitHub repository to get the latest source and to build binaries. Project files are available for all major platforms except Android.

Packages last updated 5/23/2013.

Reporting Problems

To report problems or suggest new functionality, please use the issues list in the GitHub repository.

Discussion and Questions

Use the KTX forum of the forums for discussion and questions.

GitHub Repository

The source repository for libktx and toktx is on GitHub and can be accessed at

Copyright © 2013 Khronos Group. All rights reserved.