8b3c2e9b37
* Deprecated update_with_buffer and added a temporary (update_with_buffer_size) for now. This will later be removed and the update_with_buffer is requiring the size to bu suplied * Reparation for 0.14 release * Missed one case * Minor cleanup * Switch to C scalar for Unix + rename Reason is so we can always use optimized scalar even in debug. Also removed _size so only update_with_buffer(..) takes width, height of the input buffer * Implemented AspectRatio aware scale on nix * Implemented image center * Added UpperLeft center mode for unix * Moving macOS over to sized update * Fixed resize not working on macOS * WIP on macOS * More WIP on macOS version * Bunch of macOS updates and fixes * Fixed broken bg color on macOS * Windows fixes WIP * Remove some spamming * More windows fixes * Windows fixes for cursor and warnings * Some cleanup * rustfmt pass * Fixed typo * Added support for limiting update rate * Added update rate to Windows * Added update rate to macOS * Misc fixes * Fixed resources and maintance badge * Updated readme * Updated changelog * Added rate limit |
||
---|---|---|
.github/workflows | ||
.vs | ||
examples | ||
resources | ||
src | ||
.gitignore | ||
build.rs | ||
Cargo.toml | ||
CHANGELOG.md | ||
LICENSE | ||
LICENSE-APACHE | ||
LICENSE-MIT | ||
README.md |
minifb is a cross platform library written in Rust 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. An example is the best way to show how it works:
Usage
# Cargo.toml
[dependencies]
minifb = "0.15"
Example
extern crate minifb;
use minifb::{Key, Window, WindowOptions};
const WIDTH: usize = 640;
const HEIGHT: usize = 360;
fn main() {
let mut buffer: Vec<u32> = vec![0; WIDTH * HEIGHT];
let mut window = Window::new(
"Test - ESC to exit",
WIDTH,
HEIGHT,
WindowOptions::default(),
)
.unwrap_or_else(|e| {
panic!("{}", e);
});
// Limit to max ~60 fps update rate
window.limit_update_rate(Some(std::time::Duration::from_micros(16600)));
while window.is_open() && !window.is_key_down(Key::Escape) {
for i in buffer.iter_mut() {
*i = 0; // write something more funny here!
}
// We unwrap here as we want this code to exit if it fails. Real applications may want to handle this in a different way
window
.update_with_buffer(&buffer, WIDTH, HEIGHT)
.unwrap();
}
}
Status
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). Bug report(s) for other OSes/CPUs are welcome! Notice: That after 0.13 Redox hasn't been updated and some work is required to get that working again. PR are welcome.
Build instructions
cargo build
cargo run --example noise
This will run the noise example
License
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (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.