oidn 2.4.1

A wrapper for the Intel OpenImageDenoise image denoising library.
Documentation
extern crate rand;

use rand::RngExt;

const WIDTH: usize = 128;
const HEIGHT: usize = 9;
const BUFFER_LEN: usize = WIDTH * HEIGHT * 3;

fn main() {
    let mut input = [0.0; BUFFER_LEN];
    let mut rng = rand::rng();
    for float in input.iter_mut() {
        let rand = rng.random();
        *float = rand;
    }
    println!("randomized:");
    for y in 0..HEIGHT {
        for x in 0..WIDTH {
            let idx = ((y * WIDTH) + x) * 3;
            let colour = &input[idx..idx + 3];
            print!(
                "\x1b[38;2;{};{};{}m#\x1b[0m",
                (colour[0] * 255.0) as u8,
                (colour[1] * 255.0) as u8,
                (colour[2] * 255.0) as u8
            )
        }
        println!();
    }
    let device = oidn::Device::new();
    let mut filter = oidn::filter::RayTracing::new(&device);
    let buffer = device.create_buffer(&input).unwrap();
    let output_buffer = device.create_buffer(&[0.0; BUFFER_LEN]).unwrap();
    filter
        .image_dimensions(WIDTH, HEIGHT)
        .filter_buffer(&buffer, &output_buffer)
        .unwrap();
    let slice = output_buffer.read();
    println!();
    println!("denoised:");
    for y in 0..HEIGHT {
        for x in 0..WIDTH {
            let idx = ((y * WIDTH) + x) * 3;
            let colour = &slice[idx..idx + 3];
            print!(
                "\x1b[38;2;{};{};{}m#\x1b[0m",
                (colour[0] * 255.0) as u8,
                (colour[1] * 255.0) as u8,
                (colour[2] * 255.0) as u8
            )
        }
        println!();
    }
}