1个不稳定版本
0.0.1 | 2023年8月10日 |
---|
#64 in #winit
41KB
776 行
wcanvas
这是一个Rust包,它提供了一个用于与winit
一起使用的2D图形库。
请参阅文档以了解如何使用该库。
注意:该包目前正在开发中。
lib.rs
:
wcanvas
这是一个基于winit
的Rust 2D图形库。它目前使用WebGPU作为底层实现。
入门指南
winit
包提供了一个跨平台的窗口操作API,但故意不支持创建任何图形上下文。这是因为用户可能想要使用各种图形API,如OpenGL或WebGPU,它们与窗口创建和操作是分开的。
wcanvas
包与winit
接口,并提供一个2D图形上下文。您可以从创建一个事件循环和窗口开始
#[tokio::main]
async fn main() {
let event_loop = EventLoop::new();
let window = WindowBuilder::new()
.with_title("wcanvas - Getting started")
.with_inner_size(LogicalSize::new(600, 600))
.build(&event_loop)
.unwrap();
// ...
}
接下来,需要为窗口创建一个“画布”。这个画布拥有窗口的所有权,您可以使用window()
方法稍后借用它。
use wcanvas::canvas::CanvasBackend;
let mut canvas = window.create_canvas().await.unwrap();
最后,我们将运行事件循环,并获取重绘事件
event_loop.run(move |event, _, control_flow| {
*control_flow = ControlFlow::Wait;
match event {
Event::RedrawRequested(window_id) if window_id == canvas.window().id() => {
// Redraw requested! We will draw here...
}
}
});
最后,我们可以通过调用canvas.draw_frame()
方法来处理重绘请求。此方法接受一个回调,并将“图形上下文”传递给它。然后,这个图形上下文允许我们进行绘图。例如,我们可以画一个绿色的方块
canvas.draw_frame(|context| {
context.set_brush(&Brush::solid(&(0, 255, 0).into())); // color = green
context.fill_rect(&(20, 20, 200, 200).into()); // at (20, 20), size 200x200
});
依赖项
~19–56MB
~686K SLoC