4个版本 (2个破坏性更新)
0.3.2 | 2022年6月7日 |
---|---|
0.3.1 | 2022年3月5日 |
0.3.0 |
|
0.2.0 | 2022年2月25日 |
0.1.1 | 2022年2月21日 |
#50 in #canvas
32KB
436 行
FerruX Canvas
FerruX Canvas是Pixelscrate的一个抽象层。它管理像素缓冲区,公开简单的操作以在屏幕上绘制像素、线条和图形。在其当前状态下,它仅与Winit一起工作。
当前目标列表可在仓库的项目中找到。
用法
构建画布
目前,提供的唯一Canvas是WinitCanvas,它需要一个Winit Window,这将需要一个自己的EventLoop引用。
let event_loop = winit::event_loop::EventLoop::new();
let window = winit::window::Window::new(&event_loop)?;
let canvas = ferrux_canvas::canvas::winit::WinitCanvas::new(&window)?;
运行画布
使用画布的主要流程是
- 使用绘图函数,例如
draw_line
和draw_triangle
。 - 调用
render
方法将其打印到屏幕上。 - 使用
reset_frame
清除当前缓冲区并绘制新帧。
以下示例使用我们构建的WinitCanvas
绘制一个变形三角形。
let mut x: i32 = 1;
let mut incrementing = true;
event_loop.run(move |event, _, control_flow| {
match event {
Event::MainEventsCleared => {
window.request_redraw();
}
Event::RedrawRequested(_) => {
if !(1..100).contains(&x) {
incrementing = !incrementing;
}
x += if incrementing { 1 } else { -1 };
canvas.draw_triangle((100, (100 - x) as u32), (100 - x as u32, 100),
(200 - x as u32, 200 - x as u32), palette::WHITE);
canvas.fill_triangle((100, (100 - x) as u32), (100 - x as u32, 100),
(200 - x as u32, 200 - x as u32), Color::from_rgba("2303b0dd"));
canvas.render().unwrap();
canvas.reset_frame();
}
_ => (),
}
});
关于
FerruX Canvas是在创建FerruXengine(我试图制作的3D图形引擎)的过程中开发的工具。我制作这个画布是为了简化使用引擎中使用的Pixels缓冲区。因为这个工具对于我想做的其他可能的项目很有用,而且我的几个朋友也认为他们可以使用它,所以决定将其提取为一个单独的库。
许可证
根据您的选择,许可如下
- Apache License,版本2.0 (LICENSE-APACHE)
- MIT许可证 (LICENSE-MIT)
贡献
除非您明确声明,否则任何有意提交以包含在您的工作中的贡献,根据Apache-2.0许可证定义,应按照上述方式双许可,不附加任何额外条款或条件。
依赖项
~9–24MB
~354K SLoC