Skip to main content

texture/
texture.rs

1extern crate gust_render as gust;
2
3use gust::prelude::*;
4use gust::texture::RgbMode;
5use std::rc::Rc;
6
7fn main() {
8    let mut window = Window::new(gust::WIDTH, gust::HEIGHT, "Hello");
9    let mut pixels: Vec<u8> = vec![125; 200 * 200 * 4];
10    let pix: Vec<u8> = vec![255; 100 * 100 * 3];
11    let mut my_tex = Texture::from_path("examples/texture/New.png").unwrap();
12    let blank;
13
14    unsafe {
15        use std::os::raw::c_void;
16        blank = Texture::from_data(pixels.as_mut_ptr() as *mut c_void, RgbMode::RGBA, 200, 200);
17    }
18
19    my_tex
20        .update_block(
21            pix.as_slice(),
22            Vector::new(100, 100),
23            Vector::new(10, 10),
24            None,
25        )
26        .unwrap();
27
28    let blank_rc = Rc::new(blank);
29    let tex_dirt = Rc::new(my_tex);
30    let event_handler = EventHandler::new(&window);
31    let mut sprite = Sprite::from(&tex_dirt);
32    let mut leave = Sprite::from(&blank_rc);
33    let mut sprite2 = Sprite::from(&tex_dirt);
34
35    leave.set_position(Point::new(600.0, 100.0));
36    sprite.set_position(Vector::new(100.0, 100.0));
37    sprite2.set_position(Point::new(1000.0, 100.0));
38    sprite.update();
39    sprite2.update();
40    leave.update();
41
42    window.poll(None);
43    window.enable_cursor();
44    window.set_clear_color(Color::new(0.0, 0.0, 1.0));
45    while window.is_open() {
46        window.poll_events();
47
48        for event in event_handler.fetch() {
49            event_process(event, &mut window, &tex_dirt, &mut sprite);
50        }
51
52        window.clear();
53        window.draw(&sprite);
54        window.draw(&leave);
55        window.draw(&sprite2);
56        window.display();
57    }
58}
59
60fn event_process(event: Event, window: &mut Window, texture: &Texture, sprite: &mut Sprite) {
61    match event.1 {
62        Events::Key(Key::Escape, _, _, _) => {
63            window.close();
64        }
65        Events::MouseButton(_, _, _) => {
66            println!("Dumping texture to test.png");
67            texture.to_file("test.png").unwrap();
68        }
69        Events::CursorPos(x, y) => {
70            sprite.set_position(Vector::new(x as f32, y as f32));
71        }
72        _ => {}
73    }
74}