use radiant_utils as ru;
use radiant_rs::{Color, Renderer, Layer, Display, Font, blendmodes};
use std::thread;
use std::sync::{Arc, Barrier};
pub fn main() {
let display = Display::builder().dimensions((640, 480)).vsync().title("Threads example").build().unwrap();
let renderer = Renderer::new(&display).unwrap();
let layer = Arc::new(Layer::new((640., 480.)));
layer.set_blendmode(blendmodes::LIGHTEN);
let font = Arc::new(Font::builder(display.context()).family("Arial").size(20.0).build().unwrap());
let num_threads = 15;
let draw_start = Arc::new(Barrier::new(num_threads + 1));
let draw_done = Arc::new(Barrier::new(num_threads + 1));
for i in 0..num_threads {
let (font, layer, draw_start, draw_done) = (font.clone(), layer.clone(), draw_start.clone(), draw_done.clone());
thread::spawn(move || {
let mut rot = 0.0;
let pos = 120.0 + (i as f32) * 20.0;
loop {
font.write_transformed(&layer, &format!("Thread {} !", i+1), (pos, pos / 1.33), Color::WHITE, 0.0, rot, (1.0, 1.0));
rot += 0.01;
draw_start.wait();
draw_done.wait();
}
});
}
ru::renderloop(|_| {
draw_start.wait();
display.clear_frame(Color::BLACK);
renderer.draw_layer(&layer, 0);
layer.clear();
draw_done.wait();
display.swap_frame();
!display.poll_events().was_closed()
});
}