2019-11-12 01:29:43 +11:00
[![Build Status ](https://github.com/emoon/rust_minifb/workflows/CI/badge.svg )](https://github.com/emoon/rust_minifb/actions?workflow=CI)
2016-01-05 08:40:38 +11:00
[![Crates.io ](https://img.shields.io/crates/v/minifb.svg )](https://crates.io/crates/minifb)
2016-09-18 18:18:11 +10:00
[![Documentation ](https://docs.rs/minifb/badge.svg )](https://docs.rs/minifb)
2015-11-23 04:55:38 +11:00
2016-07-26 21:43:45 +10:00
minifb is a cross platform library written in [Rust ](https://www.rust-lang.org ) and that makes it easy to setup a window and to (optional) display a 32-bit pixel buffer. It also makes it easy to get input from keyboard and mouse.
2016-02-01 04:34:05 +11:00
An example is the best way to show how it works:
2015-11-24 05:46:51 +11:00
2016-09-18 18:18:11 +10:00
[Changelog ](https://github.com/emoon/rust_minifb/blob/master/CHANGELOG.md )
2016-01-05 08:40:38 +11:00
2016-01-03 18:29:37 +11:00
Usage
-----
```toml
# Cargo.toml
[dependencies]
2020-07-09 21:50:16 +10:00
minifb = "0.17"
2016-01-03 18:29:37 +11:00
```
Example
-------
2015-11-23 04:55:38 +11:00
2015-11-23 05:00:35 +11:00
```rust
extern crate minifb;
2015-11-23 04:55:38 +11:00
2019-12-16 18:24:48 +11:00
use minifb::{Key, Window, WindowOptions};
2016-01-20 03:42:58 +11:00
2015-12-25 20:37:13 +11:00
const WIDTH: usize = 640;
const HEIGHT: usize = 360;
2015-11-23 04:55:38 +11:00
2015-11-23 05:00:35 +11:00
fn main() {
2016-01-06 07:29:52 +11:00
let mut buffer: Vec< u32 > = vec![0; WIDTH * HEIGHT];
2015-11-23 04:55:38 +11:00
2019-12-16 18:24:48 +11:00
let mut window = Window::new(
"Test - ESC to exit",
WIDTH,
HEIGHT,
WindowOptions::default(),
)
.unwrap_or_else(|e| {
2016-09-18 18:25:08 +10:00
panic!("{}", e);
});
2015-11-23 04:55:38 +11:00
2019-12-16 18:24:48 +11:00
// Limit to max ~60 fps update rate
window.limit_update_rate(Some(std::time::Duration::from_micros(16600)));
2015-12-25 20:37:13 +11:00
while window.is_open() & & !window.is_key_down(Key::Escape) {
2015-11-23 05:00:35 +11:00
for i in buffer.iter_mut() {
2015-12-25 20:37:13 +11:00
*i = 0; // write something more funny here!
2015-11-23 05:00:35 +11:00
}
2015-11-23 04:55:38 +11:00
2017-08-11 20:41:24 +10:00
// We unwrap here as we want this code to exit if it fails. Real applications may want to handle this in a different way
2019-12-16 18:24:48 +11:00
window
.update_with_buffer(& buffer, WIDTH, HEIGHT)
.unwrap();
2015-12-25 20:37:13 +11:00
}
2015-11-23 05:01:34 +11:00
}
2015-11-23 05:00:35 +11:00
```
2015-11-23 04:55:38 +11:00
2015-11-24 05:46:51 +11:00
Status
------
2020-06-17 14:33:09 +10:00
Currently macOS, Linux and Windows (64-bit and 32-bit) are the current supported platforms. X11 (Linux/FreeBSD/etc) support has been tested on Ubuntu (x64). Linux Wayland support is also available. Bug report(s) for other OSes/CPUs are welcome!
2019-12-16 18:24:48 +11:00
Notice: That after 0.13 Redox hasn't been updated and some work is required to get that working again. PR are welcome.
2015-11-24 05:46:51 +11:00
2016-01-03 18:29:37 +11:00
Build instructions
2015-11-23 04:55:38 +11:00
------------------
2020-07-09 21:50:16 +10:00
On Linux you may need to install these dependencies first:
```
sudo apt install libxkbcommon-dev libwayland-cursor0 libwayland-dev
```
2015-11-24 05:27:18 +11:00
```
2015-11-23 05:00:35 +11:00
cargo build
2016-03-05 03:36:28 +11:00
cargo run --example noise
2015-11-24 05:27:18 +11:00
```
2015-11-24 05:26:27 +11:00
2018-11-14 07:41:00 +11:00
This will run the [noise example ](https://github.com/emoon/rust_minifb/blob/master/examples/noise.rs )
2016-01-11 04:36:57 +11:00
## License
Licensed under either of
* Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)
* MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)
at your option.
### Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.