Extract image savers to function
This commit is contained in:
parent
d125635f80
commit
946617f988
|
|
@ -1,7 +1,7 @@
|
||||||
use std::env::args;
|
use std::env::args;
|
||||||
use std::error::Error;
|
use std::error::Error;
|
||||||
use std::io::{stdout, Write};
|
use std::io::{stdout, Write};
|
||||||
use std::path::PathBuf;
|
use std::path::{Path, PathBuf};
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use std::{fs, io};
|
use std::{fs, io};
|
||||||
|
|
||||||
|
|
@ -50,12 +50,23 @@ fn main() {
|
||||||
}
|
}
|
||||||
|
|
||||||
let n_threads = std::thread::available_parallelism().map(|n| n.get()).unwrap_or(2);
|
let n_threads = std::thread::available_parallelism().map(|n| n.get()).unwrap_or(2);
|
||||||
|
let (img_sender, img_receiver) = async_channel::bounded::<Frame>(2 * n_threads);
|
||||||
std::thread::scope(|s| {
|
std::thread::scope(|s| {
|
||||||
let (img_sender, img_receiver) = async_channel::bounded::<(u32, Arc<wgpu::Buffer>)>(2 * n_threads);
|
|
||||||
for _ in 0..n_threads {
|
for _ in 0..n_threads {
|
||||||
let img_receiver = img_receiver.clone();
|
start_saver(s, &path, &img_receiver);
|
||||||
let path = &path;
|
}
|
||||||
s.spawn(move || {
|
do_work(img_sender, start_frame, stop_frame);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
type Frame = (u32, Arc<wgpu::Buffer>);
|
||||||
|
|
||||||
|
fn start_saver<'a>(
|
||||||
|
scope: &'a std::thread::Scope<'a, '_>,
|
||||||
|
path: &'a Path,
|
||||||
|
img_receiver: &'a async_channel::Receiver<Frame>,
|
||||||
|
) {
|
||||||
|
scope.spawn(move || {
|
||||||
while let Ok((frame, buffer)) = img_receiver.recv_blocking() {
|
while let Ok((frame, buffer)) = img_receiver.recv_blocking() {
|
||||||
let img = image::RgbaImage::from_raw(SIZE.x, SIZE.y, buffer.slice(..).get_mapped_range().to_vec())
|
let img = image::RgbaImage::from_raw(SIZE.x, SIZE.y, buffer.slice(..).get_mapped_range().to_vec())
|
||||||
.expect("read failure!");
|
.expect("read failure!");
|
||||||
|
|
@ -65,11 +76,9 @@ fn main() {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
do_work(img_sender, start_frame, stop_frame);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
fn do_work(img_sender: async_channel::Sender<(u32, Arc<wgpu::Buffer>)>, start_frame: u32, stop_frame: u32) {
|
fn do_work(img_sender: async_channel::Sender<Frame>, start_frame: u32, stop_frame: u32) {
|
||||||
|
println!("Loading...");
|
||||||
let img_sender = Arc::new(img_sender);
|
let img_sender = Arc::new(img_sender);
|
||||||
|
|
||||||
let (device, queue) = pollster::block_on(init_gpu()).unwrap();
|
let (device, queue) = pollster::block_on(init_gpu()).unwrap();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user