/nvtt_samples

NVIDIA Texture Tools samples for compression, image processing, and decompression.

Primary LanguageC++Apache License 2.0Apache-2.0

NVTT 3 Samples

This repository contains a number of samples showing how to use NVTT 3, a GPU-accelerated texture compression and image processing library.

This includes several small samples intended as tutorials:

  • mini_bc7 shows how to load an image and turn it into a one-mipmap DDS file using BC7 block compression. It's small enough that it can be rewritten in 250 characters (without error checking):
#include<nvtt/nvtt.h>
int main(int n,char**v){if(n==3){nvtt::Surface i;i.load(v[1]);nvtt::Context c(1);nvtt::CompressionOptions o;o.setFormat(nvtt::Format_BC7);nvtt::OutputOptions p;p.setFileName(v[2]);c.outputHeader(i,1,o,p);c.compress(i,0,0,o,p);}}
  • mipmap shows how to generate mipmaps from an image, and describes linear-space filtering and premultiplied alpha.
  • cuda_input shows how to use NVTT 3's low-level GPUInputBuffer API to compress a texture directly from a GPU buffer. This API accelerates compression by avoiding CPU-GPU data transfers.
  • c_wrapper_demo shows how to use NVTT 3's C wrapper, which allows other compilers and programming languages to use NVTT 3. It covers the high-level and low-level APIs.
  • to_slope_space shows how to use nvtt::Surface::channel(). It converts a normal map to a slope-space BC5 normal map.

This also includes the source code for several tools from NVTT 3 ported to use the nvpro-samples framework, which show how to use almost all of the functionality in NVTT 3:

  • compress is a general command-line tool for compressing images to DDS files, and uses similar flags as the Texture Tools Exporter's command-line interface. It supports many types of images, including normal maps. It can also compress multiple files at once (the batchCompress tool was merged into it in June 2023)
  • decompress decompresses DDS files to other formats.
  • imgdiff reports error metrics between image files.

For comprehensive API documentation, please see the docs/ folder in the NVTT 3 distribution.

Build Instructions

To build these samples, you'll need the NVTT 3 SDK. For cuda_input, you'll also need the CUDA Toolkit. Then do one of the following:

You can then use CMake to generate and subsequently build the project.