4个版本

0.3.1 2023年3月11日
0.3.0 2021年8月3日
0.2.1 2021年2月19日
0.2.0 2021年2月17日

#115渲染

Download history 23/week @ 2024-03-11 14/week @ 2024-03-18 9/week @ 2024-03-25 39/week @ 2024-04-01 10/week @ 2024-04-08 16/week @ 2024-04-15 29/week @ 2024-04-22 15/week @ 2024-04-29 16/week @ 2024-05-06 11/week @ 2024-05-13 19/week @ 2024-05-20 15/week @ 2024-05-27 17/week @ 2024-06-03 14/week @ 2024-06-10 15/week @ 2024-06-17 15/week @ 2024-06-24

63 每月下载量

Apache-2.0

3.5MB
9K SLoC

flo_draw = "0.3"

flo_draw

如果您想在Rust中将一些2D图形立即渲染到屏幕上,而不必处理在UI框架中设置图形上下文的常规繁琐事务,那么您需要的就是flo_draw这个crate。

flo_draw还附带了一套强大的2D图形库,并具有灵活的基于流的API,可以轻松完成许多其他库可能需要大量工作的任务。

动机

Screenshot

在构建FlowBetween时,我发现我需要一些用于渲染图形的工具:一个平台无关的API以及一种可以渲染位图文件而不依赖于任何特定平台的方法。在调试过程中,我发现我非常想要一个简单的方法来弹出一个窗口并在其中绘制图形。这在20世纪80年代非常简单(如截图所示),但随着GUI和3D加速的发展,图形渲染变得越来越困难。

flo_draw将专为FlowBetween创建的2D图形crate添加了一个API,以简化使它们工作所需的所有繁琐任务。

基本示例

这是一个简单示例,将打开一个包含三角形的窗口

use flo_draw::*;
use flo_canvas::*;

pub fn main() {
    with_2d_graphics(|| {
        let canvas = create_canvas_window();

        canvas.draw(|gc| {
            gc.clear_canvas(Color::Rgba(0.0, 0.0, 0.0, 1.0));
            gc.canvas_height(1000.0);
            gc.center_region(0.0, 0.0, 1000.0, 1000.0);

            // Draw a rectangle...
            gc.new_path();
            gc.move_to(0.0, 0.0);
            gc.line_to(1000.0, 0.0);
            gc.line_to(1000.0, 1000.0);
            gc.line_to(0.0, 1000.0);
            gc.line_to(0.0, 0.0);

            gc.fill_color(Color::Rgba(1.0, 1.0, 0.8, 1.0));
            gc.fill();

            // Draw a triangle on top
            gc.new_path();
            gc.move_to(200.0, 200.0);
            gc.line_to(800.0, 200.0);
            gc.line_to(500.0, 800.0);
            gc.line_to(200.0, 200.0);

            gc.fill_color(Color::Rgba(0.0, 0.0, 0.8, 1.0));
            gc.fill();
        });
    });
}

有关更多信息,您可以查阅指南示例

--

Wibble Mandelbrot Wibble

依赖项

~36MB
~562K SLoC