use graphics::{ellipse, image, text, Transformed};
use graphics_buffer::*;
use piston_window::{
clear, Event, Loop, PistonWindow, TextureSettings, UpdateArgs, WindowSettings,
};
fn main() {
let matt = RenderBuffer::decode_from_bytes(include_bytes!("matt.jpg")).unwrap();
let mut glyphs = buffer_glyphs_from_bytes(include_bytes!("roboto.ttf")).unwrap();
let mut buffer = RenderBuffer::new(matt.width(), matt.height());
buffer.clear([0.0, 0.0, 0.0, 1.0]);
image(&matt, IDENTITY, &mut buffer);
const RED: [f32; 4] = [1.0, 0.0, 0.0, 0.7];
const DIAMETER: f64 = 40.0;
ellipse(
RED,
[115.0, 175.0, DIAMETER, DIAMETER],
IDENTITY,
&mut buffer,
);
ellipse(
RED,
[210.0, 195.0, DIAMETER, DIAMETER],
IDENTITY,
&mut buffer,
);
text(
[0.0, 1.0, 0.0, 1.0],
70,
"# w o k e",
&mut glyphs,
IDENTITY.trans(0.0, 70.0),
&mut buffer,
)
.unwrap();
let mut window: PistonWindow = WindowSettings::new(
"piston_window texture example",
(matt.height(), matt.height()),
)
.exit_on_esc(true)
.build()
.unwrap();
let matt_texture = buffer
.to_g2d_texture(
&mut window.create_texture_context(),
&TextureSettings::new(),
)
.unwrap();
let mut rot = 0.0;
while let Some(event) = window.next() {
match event {
Event::Loop(Loop::Render(..)) => {
window.draw_2d(&event, |context, graphics, _| {
clear([0.0, 0.0, 0.0, 1.0], graphics);
image(
&matt_texture,
context
.transform
.trans(matt.height() as f64 / 2.0, matt.height() as f64 / 2.0)
.scale(0.5, 0.5)
.rot_rad(rot),
graphics,
);
});
}
Event::Loop(Loop::Update(UpdateArgs { dt, .. })) => rot += dt,
_ => (),
}
}
buffer.save("red_eyes.png").unwrap();
}