1 unstable release
0.1.0 | Sep 20, 2020 |
---|
#5 in #mipmap
86KB
2K
SLoC
wgpu-mipmap
Generate mipmaps for wgpu textures.
Usage
Add this to your Cargo.toml
:
[dependencies]
wgpu-mipmap = "0.1"
Example usage:
use wgpu_mipmap::*;
fn example(device: &wgpu::Device, queue: &wgpu::Queue) -> Result<(), Error> {
// create a recommended generator
let generator = RecommendedMipmapGenerator::new(&device);
// create and upload data to a texture
let texture_descriptor = wgpu::TextureDescriptor {
size: wgpu::Extent3d {
width: 512,
height: 512,
depth: 1,
},
mip_level_count: 10, // 1 + log2(512)
sample_count: 1,
format: wgpu::TextureFormat::Rgba8Unorm,
dimension: wgpu::TextureDimension::D2,
usage: wgpu::TextureUsage::STORAGE,
label: None,
};
let texture = device.create_texture(&texture_descriptor);
// upload_data_to_texture(&texture);
// create an encoder and generate mipmaps for the texture
let mut encoder = device.create_command_encoder(&Default::default());
generator.generate(&device, &mut encoder, &texture, &texture_descriptor)?;
queue.submit(std::iter::once(encoder.finish()));
Ok(())
}
Features
wgpu-mipmap is in the early stages of development and can only generate mipmaps for 2D textures with floating-point formats. The library implements several backends in order to support various texture usage patterns:
ComputeMipmapGenerator
: For power of two textures with with usageTextureUsage::STORAGE
. Uses a compute pipeline to generate mipmaps.RenderMipmapGenerator
: For textures with usageTextureUsage::OUTPUT_ATTACHMENT
. Uses a render pipeline to generate mipmaps.CopyMipmapGenerator
: For textures with usageTextureUsage::SAMPLED
. Allocates a new texture, uses a render pipeline to generate mipmaps in the new texture, then copies the result back to the original texture.RecommendedMipmapGenerator
: Uses one of the above implementations depending on texture usage (prefers the compute backend, followed by the render backend, and finally the copy backend).
Development
Run the examples
The examples test various use cases and generate images for manual inspection and comparsion.
$ cargo run --example cat
$ cargo run --example checkerboard
Run the tests
$ cargo test
How to compile the shaders
$ make build-shaders
See src/shaders/README.md for dependencies and more information.
Benchmarks
TODO
Resources
Dependencies
~3.5–9MB
~164K SLoC