#texture-compression #texture #image-processing #nvidia #nvtt

nvtt_rs

A rust包装Nvidia纹理工具库的封装库

12个版本 (破坏性)

0.10.1 2023年1月17日
0.9.0 2020年11月18日
0.5.0 2020年6月1日
0.4.0 2020年3月5日
0.3.0 2019年11月23日

#152 in 压缩

每月35次下载

MIT许可证

170KB
2.5K SLoC

nvtt

crates.io docs rustc

A rust封装Nvidia纹理工具3库

NVTT 3是一个库,可以用于将图像数据压缩到压缩纹理格式,并处理压缩和非压缩图像。

NVTT 3中的大多数压缩算法和图像处理算法都可以通过GPU加速。对于不支持CUDA的GPU,提供了CPU回退。可以通过cuda特性启用CUDA操作。

依赖项

系统上必须安装NVTT 3 SDK。可以通过NVTT_PATH环境变量指定二进制文件的非标准路径。还需要支持至少C99和动态链接的编译器。

Windows

需要Windows 10或11(64位)。Path环境变量还必须包含包含nvtt.dll的目录的路径。请注意,这必须手动完成,在标准的Nvidia纹理工具安装中不会这样做。

Linux

仅限64位;需要Ubuntu 16.04+或类似的兼容发行版。还需要libc.so版本6或更高。

限制

目前没有文件I/O支持,没有低级(nvtt_lowlevel.h)包装,也没有批量压缩。

使用nvtt

// Create a surface
let input = InputFormat::Bgra8Ub {
    data: &[0u8; 16 * 16 * 4],
    unsigned_to_signed:  false,
};
let image = Surface::image(input, 16, 16, 1).unwrap();

// Create the compression context; enable CUDA if possible
let mut context = Context::new();
#[cfg(feature = "cuda")]
if *CUDA_SUPPORTED {
    context.set_cuda_acceleration(true);
}

// Specify compression settings to use; compress to Bc7
let mut compression_options = CompressionOptions::new();
compression_options.set_format(Format::Bc7);

// Specify how to write the compressed data; indicate as sRGB
let mut output_options = OutputOptions::new();
output_options.set_srgb_flag(true);

// Write the DDS header.
let header = context.output_header(
    &image,
    1, // number of mipmaps
    &compression_options,
    &output_options,
).unwrap();

// Compress and write the compressed data.
let bytes = context.compress(
    &image,
    &compression_options,
    &output_options,
).unwrap();

// Bc7 is 1 byte per pixel.
assert_eq!(16 * 16, bytes.len());

依赖项

~3–28MB
~388K SLoC