Steward
分享是一種喜悅、更是一種幸福
程式語言 - Rust - SDL v1.2 - Hello, world!
參考資訊:
https://www.rust-lang.org/learn/get-started
https://users.rust-lang.org/t/calling-c-function-with-string/41448/10
http://bzz.wallizard.com:8081/share/books/RUST/Programming%20Rust%202nd%20Edition.pdf
main.rs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | extern crate libc ; use libc :: types :: os :: arch :: c95 :: c_schar ; use libc ::{ c_void , c_uint , c_int , c_float , c_uchar , uint8_t , uint16_t , uint32_t , int16_t , int8_t , int32_t }; pub const SDL_INIT_VIDEO : uint32_t = 0x00000020; pub const SDL_SWSURFACE : uint32_t = 0x00000000; pub const SDL_HWSURFACE : uint32_t = 0x00000001; pub struct SDL_Rect { pub x: i16 , pub y: i16 , pub w: u16 , pub h: u16 } pub struct SDL_Color { pub r: uint8_t , pub g: uint8_t , pub b: uint8_t , pub unused: uint8_t } pub struct SDL_Palette { pub ncolors: c_int , pub colors: * mut SDL_Color , } pub struct SDL_PixelFormat { pub palette: * mut SDL_Palette , pub BitsPerPixel: uint8_t , pub BytesPerPixel: uint8_t , pub Rloss: uint8_t , pub Gloss: uint8_t , pub Bloss: uint8_t , pub Aloss: uint8_t , pub Rshift: uint8_t , pub Gshift: uint8_t , pub Bshift: uint8_t , pub Ashift: uint8_t , pub Rmask: uint32_t , pub Gmask: uint32_t , pub Bmask: uint32_t , pub Amask: uint32_t , pub colorkey: uint32_t , pub alpha: uint8_t , } pub struct SDL_Surface { pub flags: uint32_t , pub format : * mut SDL_PixelFormat , pub w: c_int , pub h: c_int , pub pitch: uint16_t , pub pixels: * mut c_void , pub offset: c_int , pub hwdata: * mut c_void , pub clip_rect: SDL_Rect , pub unused1: uint32_t , pub locked: uint32_t , pub map: * mut c_void , pub format_version: c_uint , pub refcount: c_int } #[link(name="SDL")] #[link(name="SDL_gfx")] extern { fn SDL_Quit (); fn SDL_Delay (flags: uint32_t ); fn SDL_Init (flags: uint32_t ) -> c_int ; fn SDL_Flip (screen: * mut SDL_Surface ) -> c_int ; fn SDL_InitSubSystem (flags: uint32_t ) -> c_int ; fn SDL_FillRect (dst: * mut SDL_Surface , dstrect: * mut SDL_Rect , color: uint32_t ) -> c_int ; fn SDL_SetVideoMode (width: c_int , height: c_int , bpp: c_int , flags: uint32_t ) -> * mut SDL_Surface ; fn stringRGBA (dst: * mut SDL_Surface , x: int16_t , y: int16_t , s: * const c_uchar , r: uint8_t , g: uint8_t , b: uint8_t , a: uint8_t ) -> c_int ; } fn main () { let mut screen; unsafe { SDL_Init ( SDL_INIT_VIDEO ); screen = SDL_SetVideoMode (320, 240, 32, SDL_HWSURFACE ); stringRGBA (screen, 100, 100, "hello, world!" . as_ptr (), 0xff, 0xff, 0xff, 0xff); SDL_Flip (screen); SDL_Delay (3000); SDL_Quit (); } } |
Cargo.toml
[package] name = "main" version = "0.0.1" authors = ["Steward-Fu <steward.fu@gmail.com>"] [[bin]] name = "main" path = "main.rs" [dependencies] libc = "0.1"
編譯、執行
$ cargo build $ cargo run