mod common;
use impellers::*;
const IMAGE_BYTES: &[u8] = include_bytes!("dog.jpg");
fn main() {
let framework = common::SdlGlImpellerFrameWork::new();
let pixels = image::load_from_memory(IMAGE_BYTES).unwrap().to_rgba8();
let (width, height) = pixels.dimensions();
let contents = pixels.into_raw();
let tex = unsafe {
framework
.itx
.create_texture_with_rgba8(contents.into(), width, height)
.unwrap()
};
let dl = {
let mut builder = DisplayListBuilder::new(None);
let dog_rect = Rect::new([700.0, 500.0].into(), [600.0, 500.0].into());
let dst_rect = Rect::from_size([300.0, 250.0].into());
let path = {
let mut path_builder = PathBuilder::default();
path_builder.move_to([128.0, 0.0].into());
path_builder.line_to([168.0, 80.0].into());
path_builder.line_to([256.0, 93.0].into());
path_builder.line_to([192.0, 155.0].into());
path_builder.line_to([207.0, 244.0].into());
path_builder.line_to([128.0, 202.0].into());
path_builder.line_to([49.0, 244.0].into());
path_builder.line_to([64.0, 155.0].into());
path_builder.line_to([0.0, 93.0].into());
path_builder.line_to([88.0, 80.0].into());
path_builder.line_to([128.0, 0.0].into());
path_builder.close();
path_builder.take_path_new(FillType::NonZero)
};
{
let mut paint = Paint::default();
paint.set_color(Color::BLACK);
builder.draw_paint(&paint);
}
{
builder.save();
builder.clip_path(&path, ClipOperation::Intersect);
builder.draw_texture_rect(&tex, &dog_rect, &dst_rect, TextureSampling::Linear, None);
builder.restore(); }
{
builder.save();
builder.translate(300.0, 0.0);
builder.clip_path(&path, ClipOperation::Difference);
builder.draw_texture_rect(&tex, &dog_rect, &dst_rect, TextureSampling::Linear, None);
builder.restore(); }
builder.build().unwrap()
};
framework.enter_event_loop(Some(dl), None);
}