From 5248831232fa22a1f3d6515f7f6c7bee8994faf2 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Mon, 21 Nov 2022 16:59:50 +0100 Subject: unify repos --- vgcodec/src/main.rs | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 vgcodec/src/main.rs (limited to 'vgcodec/src/main.rs') diff --git a/vgcodec/src/main.rs b/vgcodec/src/main.rs new file mode 100644 index 0000000..9450894 --- /dev/null +++ b/vgcodec/src/main.rs @@ -0,0 +1,76 @@ +pub mod app; +pub mod diff; +pub mod export; +pub mod paint; + +use app::App; +use diff::Differ; +use image::EncodableLayout; +use wgpu::{Extent3d, Queue, Texture, TextureUsages}; + +use crate::export::Exporter; + +fn main() { + env_logger::init_from_env("LOG"); + pollster::block_on(run()); +} + +async fn run() { + let app = app::App::new().await; + + let App { device, queue, .. } = app.as_ref(); + + let img_target = image::open("a/a.png").unwrap().into_rgba8(); + let img_initial = image::open("a/initial.png").unwrap().into_rgba8(); + + let size = wgpu::Extent3d { + width: img_initial.width(), + height: img_initial.height(), + depth_or_array_layers: 1, + }; + + let create_texture = || { + device.create_texture(&wgpu::TextureDescriptor { + size, + mip_level_count: 1, + sample_count: 1, + dimension: wgpu::TextureDimension::D2, + format: wgpu::TextureFormat::Rgba8Unorm, + usage: TextureUsages::COPY_DST + | TextureUsages::TEXTURE_BINDING + | TextureUsages::COPY_SRC, + label: None, + }) + }; + + let tex_target = create_texture(); + let tex_approx = create_texture(); + + write_texture(queue, &tex_target, img_target.as_bytes(), size); + write_texture(queue, &tex_approx, img_initial.as_bytes(), size); + + let mut differ = Differ::new(&app, size, &tex_approx, &tex_target); + let exporter = Exporter::new(&app, size); + + println!("{}", differ.run().await); + + exporter.run(&tex_approx, "a/approx.png").await; +} + +pub fn write_texture(queue: &Queue, target: &Texture, data: &[u8], size: Extent3d) { + queue.write_texture( + wgpu::ImageCopyTexture { + texture: &target, + mip_level: 0, + origin: wgpu::Origin3d::ZERO, + aspect: wgpu::TextureAspect::All, + }, + &data, + wgpu::ImageDataLayout { + offset: 0, + bytes_per_row: Some(std::num::NonZeroU32::try_from((size.width * 4) as u32).unwrap()), + rows_per_image: None, + }, + size, + ); +} -- cgit v1.2.3-70-g09d2