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次下载
170KB
2.5K SLoC
nvtt
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