aboutsummaryrefslogtreecommitdiff
path: root/vgcodec/src/main.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2022-11-21 16:59:50 +0100
committermetamuffin <metamuffin@disroot.org>2022-11-21 16:59:50 +0100
commit5248831232fa22a1f3d6515f7f6c7bee8994faf2 (patch)
treefdbff884248948d124ab864e21d65fe49c6ca0e2 /vgcodec/src/main.rs
downloadvideo-codec-experiments-5248831232fa22a1f3d6515f7f6c7bee8994faf2.tar
video-codec-experiments-5248831232fa22a1f3d6515f7f6c7bee8994faf2.tar.bz2
video-codec-experiments-5248831232fa22a1f3d6515f7f6c7bee8994faf2.tar.zst
unify repos
Diffstat (limited to 'vgcodec/src/main.rs')
-rw-r--r--vgcodec/src/main.rs76
1 files changed, 76 insertions, 0 deletions
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,
+ );
+}