1 extern crate sdl2;
2
3 use sdl2::pixels::PixelFormatEnum;
4 use sdl2::rect::Rect;
5 use sdl2::event::Event;
6 use sdl2::keyboard::Keycode;
7
main() -> Result<(), String>8 pub fn main() -> Result<(), String> {
9 let sdl_context = sdl2::init()?;
10 let video_subsystem = sdl_context.video()?;
11
12 let window = video_subsystem.window("rust-sdl2 demo: Video", 800, 600)
13 .position_centered()
14 .opengl()
15 .build()
16 .map_err(|e| e.to_string())?;
17
18 let mut canvas = window.into_canvas().build().map_err(|e| e.to_string())?;
19 let texture_creator = canvas.texture_creator();
20
21 let mut texture = texture_creator.create_texture_streaming(PixelFormatEnum::RGB24, 256, 256)
22 .map_err(|e| e.to_string())?;
23 // Create a red-green gradient
24 texture.with_lock(None, |buffer: &mut [u8], pitch: usize| {
25 for y in 0..256 {
26 for x in 0..256 {
27 let offset = y*pitch + x*3;
28 buffer[offset] = x as u8;
29 buffer[offset + 1] = y as u8;
30 buffer[offset + 2] = 0;
31 }
32 }
33 })?;
34
35 canvas.clear();
36 canvas.copy(&texture, None, Some(Rect::new(100, 100, 256, 256)))?;
37 canvas.copy_ex(&texture, None,
38 Some(Rect::new(450, 100, 256, 256)), 30.0, None, false, false)?;
39 canvas.present();
40
41 let mut event_pump = sdl_context.event_pump()?;
42
43 'running: loop {
44 for event in event_pump.poll_iter() {
45 match event {
46 Event::Quit {..}
47 | Event::KeyDown { keycode: Some(Keycode::Escape), .. } => {
48 break 'running
49 },
50 _ => {}
51 }
52 }
53 // The rest of the game loop goes here...
54 }
55
56 Ok(())
57 }
58