Don't push an image when starting painter threads
This commit is contained in:
42
src/main.rs
42
src/main.rs
@@ -173,7 +173,7 @@ fn start(
|
|||||||
|
|
||||||
// Create a new pixelflut canvas
|
// Create a new pixelflut canvas
|
||||||
// TODO: Remove this image path here, fully move it to the manager
|
// TODO: Remove this image path here, fully move it to the manager
|
||||||
let mut canvas = PixCanvas::new(host, image_paths[0], count, size, offset);
|
let mut canvas = PixCanvas::new(host, count, size, offset);
|
||||||
|
|
||||||
// Load the image manager
|
// Load the image manager
|
||||||
let mut image_manager = ImageManager::load(image_paths, &size);
|
let mut image_manager = ImageManager::load(image_paths, &size);
|
||||||
@@ -210,12 +210,8 @@ fn load_image(path: &str, size: &(u32, u32)) -> DynamicImage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Load the image
|
// Load the image
|
||||||
println!("Loading image...");
|
|
||||||
let image = image::open(&path).unwrap();
|
let image = image::open(&path).unwrap();
|
||||||
|
|
||||||
// Start processing the image for the screen
|
|
||||||
println!("Processing image...");
|
|
||||||
|
|
||||||
// Resize the image to fit the screen
|
// Resize the image to fit the screen
|
||||||
image.resize_exact(
|
image.resize_exact(
|
||||||
size.0,
|
size.0,
|
||||||
@@ -243,12 +239,20 @@ impl ImageManager {
|
|||||||
|
|
||||||
/// Instantiate the image manager, and load the images from the given paths.
|
/// Instantiate the image manager, and load the images from the given paths.
|
||||||
pub fn load(paths: Vec<&str>, size: &(u32, u32)) -> ImageManager {
|
pub fn load(paths: Vec<&str>, size: &(u32, u32)) -> ImageManager {
|
||||||
|
// Show a status message
|
||||||
|
println!("Load and process {} image(s)...", paths.len());
|
||||||
|
|
||||||
// Load the images from the paths
|
// Load the images from the paths
|
||||||
ImageManager::from(
|
let image_manager = ImageManager::from(
|
||||||
paths.iter()
|
paths.iter()
|
||||||
.map(|path| load_image(path, &size))
|
.map(|path| load_image(path, &size))
|
||||||
.collect()
|
.collect()
|
||||||
)
|
);
|
||||||
|
|
||||||
|
// We succeeded
|
||||||
|
println!("All images have been loaded successfully");
|
||||||
|
|
||||||
|
image_manager
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Tick the image
|
/// Tick the image
|
||||||
@@ -279,7 +283,6 @@ struct PixCanvas {
|
|||||||
painter_count: usize,
|
painter_count: usize,
|
||||||
painters: Vec<JoinHandle<u32>>,
|
painters: Vec<JoinHandle<u32>>,
|
||||||
painter_handles: Vec<PainterHandle>,
|
painter_handles: Vec<PainterHandle>,
|
||||||
image: DynamicImage,
|
|
||||||
size: (u32, u32),
|
size: (u32, u32),
|
||||||
offset: (u32, u32),
|
offset: (u32, u32),
|
||||||
}
|
}
|
||||||
@@ -288,21 +291,16 @@ impl PixCanvas {
|
|||||||
/// Create a new pixelflut canvas.
|
/// Create a new pixelflut canvas.
|
||||||
pub fn new(
|
pub fn new(
|
||||||
host: &str,
|
host: &str,
|
||||||
image_path: &str,
|
|
||||||
painter_count: usize,
|
painter_count: usize,
|
||||||
size: (u32, u32),
|
size: (u32, u32),
|
||||||
offset: (u32, u32),
|
offset: (u32, u32),
|
||||||
) -> PixCanvas {
|
) -> PixCanvas {
|
||||||
// Load the image
|
|
||||||
let image = load_image(image_path, &size);
|
|
||||||
|
|
||||||
// Initialize the object
|
// Initialize the object
|
||||||
let mut canvas = PixCanvas {
|
let mut canvas = PixCanvas {
|
||||||
host: host.to_string(),
|
host: host.to_string(),
|
||||||
painter_count,
|
painter_count,
|
||||||
painters: Vec::with_capacity(painter_count),
|
painters: Vec::with_capacity(painter_count),
|
||||||
painter_handles: Vec::with_capacity(painter_count),
|
painter_handles: Vec::with_capacity(painter_count),
|
||||||
image,
|
|
||||||
size,
|
size,
|
||||||
offset,
|
offset,
|
||||||
};
|
};
|
||||||
@@ -342,19 +340,12 @@ impl PixCanvas {
|
|||||||
// Get the host that will be used
|
// Get the host that will be used
|
||||||
let host = self.host.to_string();
|
let host = self.host.to_string();
|
||||||
|
|
||||||
// Get the part of the image to draw by this painter
|
|
||||||
let image = self.image.crop(
|
|
||||||
area.x,
|
|
||||||
area.y,
|
|
||||||
area.w,
|
|
||||||
area.h,
|
|
||||||
);
|
|
||||||
|
|
||||||
// Redefine the offset to make it usable in the thread
|
// Redefine the offset to make it usable in the thread
|
||||||
let offset = (self.offset.0, self.offset.1);
|
let offset = (self.offset.0, self.offset.1);
|
||||||
|
|
||||||
// Create a channel to push new images
|
// Create a channel to push new images
|
||||||
let (tx, rx): (Sender<DynamicImage>, Receiver<DynamicImage>) = mpsc::channel();
|
let (tx, rx): (Sender<DynamicImage>, Receiver<DynamicImage>)
|
||||||
|
= mpsc::channel();
|
||||||
|
|
||||||
// Create the painter thread
|
// Create the painter thread
|
||||||
let thread = thread::spawn(move || {
|
let thread = thread::spawn(move || {
|
||||||
@@ -366,7 +357,12 @@ impl PixCanvas {
|
|||||||
let client = PixClient::new(stream);
|
let client = PixClient::new(stream);
|
||||||
|
|
||||||
// Create a painter
|
// Create a painter
|
||||||
let mut painter = Painter::new(client, area, offset, Some(image));
|
let mut painter = Painter::new(
|
||||||
|
client,
|
||||||
|
area,
|
||||||
|
offset,
|
||||||
|
None
|
||||||
|
);
|
||||||
|
|
||||||
// Do some work
|
// Do some work
|
||||||
loop {
|
loop {
|
||||||
|
|||||||
Reference in New Issue
Block a user