#canvas #pixel #graphics #2d

ferrux_canvas

简化使用像素缓冲区的抽象工具

4个版本 (2个破坏性更新)

0.3.2 2022年6月7日
0.3.1 2022年3月5日
0.3.0 2022年3月4日
0.2.0 2022年2月25日
0.1.1 2022年2月21日

#50 in #canvas

MIT/Apache

32KB
436

Crates.io docs.rs Rust

FerruX Canvas

FerruX Canvas是Pixelscrate的一个抽象层。它管理像素缓冲区,公开简单的操作以在屏幕上绘制像素、线条和图形。在其当前状态下,它仅与Winit一起工作。

当前目标列表可在仓库的项目中找到。

用法

构建画布

目前,提供的唯一CanvasWinitCanvas,它需要一个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)?;

运行画布

使用画布的主要流程是

以下示例使用我们构建的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-2.0许可证定义,应按照上述方式双许可,不附加任何额外条款或条件。

依赖项

~9–24MB
~354K SLoC