2个版本
0.1.1 | 2020年2月22日 |
---|---|
0.1.0 | 2020年1月17日 |
#957 在 硬件支持
每月 23 次下载
15KB
336 行
io_devices_lib Rust
用于构建使用Wasmer实验性IO设备的应用程序的Rust crate。 🔌
功能
- 支持Wasmer帧缓冲区,因此您可以使用WASI模块绘制图形! 🖼️
- 支持键盘和鼠标输入API,因此您可以检索和使用输入! ⌨️🐭
安装
将 wasmer-experimental-io-devices-lib = "0.1"
添加到您的 [dependencies]
在您的 Cargo.toml
快速入门
TODO(mark): 重新组织 io-devices-lib,以便当前的内容在 framebuffer 下命名空间
下面的程序演示了如何使用此API创建一个交互式帧缓冲区应用程序。
use std::iter;
use wasmer_experimental_io_devices_lib::{color::*, *};
const X_RES: u32 = 300;
const Y_RES: u32 = 300;
fn main() {
// create a framebuffer instance with the specified resolution
let mut fb_ctx = FrameBufferCtx::new(X_RES, Y_RES).unwrap();
// declare some data
let colors: Vec<RGBA> = vec![
(255, 0, 0).into(), // red
(0, 255, 0).into(), // green
(0, 0, 255).into(), // blue
(255, 255, 0).into(), // yellow
(255, 255, 255).into(), // white
];
let mut color_selector = 1;
'mainloop: loop {
// get input event iterator
let iter = fb_ctx.get_input().unwrap();
for ie in iter {
match ie {
InputEvent::WindowClosed | InputEvent::KeyPress(Key::Escape) => break 'mainloop,
InputEvent::KeyPress(Key::Key1) => color_selector = 1,
InputEvent::KeyPress(Key::Key2) => color_selector = 2,
InputEvent::KeyPress(Key::Key3) => color_selector = 3,
InputEvent::KeyPress(Key::Key4) => color_selector = 4,
InputEvent::KeyPress(Key::Key5) => color_selector = 5,
InputEvent::MouseEvent(x, y, et) => {
println!("{:?} at {}, {}", et, x, y);
}
_ => (),
}
}
let color = colors[color_selector - 1];
// draw all the pixels with the selected color
fb_ctx
.update_pixels(0, 0, iter::repeat(color).take((X_RES * Y_RES) as usize))
.unwrap();
fb_ctx.draw().unwrap();
// std::thread::sleep_ms(16);
}
}
在您的crate中,只需运行 cargo build --release --target=wasm32-wasi
进行编译。
使用 wasmer -V
检查您的wasmer版本,如果您尚未升级到版本0.12.0或更高版本,请运行 wasmer self-update
。
然后,运行 wasmer run --enable-experimental-io-devices target/wasm32-wasi/release/wasm-module-name.wasm
。
TODO: 添加截图
依赖关系
~2MB
~48K SLoC