This commit is contained in:
Steve Leonard
2014-01-18 21:50:35 -05:00
parent 95c350978a
commit 93ae76eefa
4 changed files with 88 additions and 0 deletions
+7
View File
@@ -19,3 +19,10 @@ cd rust-sdl2_image
rustpkg install sdl2_image
```
Demo
----
```
rustpkg install demo
./bin/demo image.[png|jpg]
```
+24
View File
@@ -0,0 +1,24 @@
#[crate_type = "bin"];
extern mod sdl2;
extern mod sdl2_image;
extern mod native;
use std::os;
mod video;
#[start]
fn start(argc: int, argv: **u8) -> int {
native::start(argc, argv, main)
}
#[main]
fn main() {
let args = os::args();
if args.len() < 2 {
println!("Usage: ./demo image.[png|jpg]")
} else {
video::main(args[1]);
}
}
+54
View File
@@ -0,0 +1,54 @@
use sdl2;
use sdl2_image;
use sdl2_image::LoadSurface;
// use sdl2_image::LoadTexture;
pub fn main(png: ~str) {
sdl2::init([sdl2::InitVideo]);
sdl2_image::init([sdl2_image::InitPng, sdl2_image::InitJpg]);
let window = match sdl2::video::Window::new("rust-sdl2 demo: Video", sdl2::video::PosCentered, sdl2::video::PosCentered, 800, 600, [sdl2::video::OpenGL]) {
Ok(window) => window,
Err(err) => fail!(format!("failed to create window: {}", err))
};
let renderer = match sdl2::render::Renderer::from_window(window, sdl2::render::DriverAuto, [sdl2::render::Accelerated]) {
Ok(renderer) => renderer,
Err(err) => fail!(format!("failed to create renderer: {}", err))
};
// Load a surface, and convert it to a texture bound to the renderer
let surface: ~sdl2::surface::Surface = match LoadSurface::from_file(png) {
Ok(surface) => surface,
Err(err) => fail!(format!("Failed to load png: {}", err))
};
let texture = match renderer.create_texture_from_surface(surface) {
Ok(texture) => texture,
Err(err) => fail!(format!("Failed to create surface: {}", err))
};
// Load a texture directly via the renderer
// let texture = match renderer.load_texture("test.png") {
// Ok(texture) => texture,
// Err(err) => fail!(format!("Could not set render target: {}", err))
// };
renderer.copy(texture, None, None);
renderer.present();
'main : loop {
'event : loop {
match sdl2::event::poll_event() {
sdl2::event::QuitEvent(_) => break 'main,
sdl2::event::KeyDownEvent(_, _, key, _, _) => {
if key == sdl2::keycode::EscapeKey {
break 'main
}
}
_ => {}
}
}
}
sdl2_image::quit();
sdl2::quit();
}
+3
View File
@@ -37,6 +37,9 @@ mod others {
mod ffi;
// repr(C) "makes the size of the enum's discriminant the default
// size of enums that the C ABI for the platform uses."
#[repr(C)]
#[deriving(Clone, Eq, IterBytes, ToStr)]
pub enum InitFlag {
InitJpg = ffi::IMG_INIT_JPG as int,