mirror of
https://github.com/encounter/rust-sdl2.git
synced 2026-07-10 21:18:41 -07:00
add demo
This commit is contained in:
@@ -19,3 +19,10 @@ cd rust-sdl2_image
|
||||
rustpkg install sdl2_image
|
||||
```
|
||||
|
||||
Demo
|
||||
----
|
||||
|
||||
```
|
||||
rustpkg install demo
|
||||
./bin/demo image.[png|jpg]
|
||||
```
|
||||
|
||||
@@ -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]);
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user