9 个版本

0.3.6 2024年5月20日
0.3.5 2023年6月16日
0.3.4 2022年7月6日
0.3.2 2021年7月2日
0.0.1 2020年2月4日

可视化 类别中排名 74

Download history 455259/week @ 2024-05-03 469760/week @ 2024-05-10 484865/week @ 2024-05-17 492157/week @ 2024-05-24 580804/week @ 2024-05-31 596604/week @ 2024-06-07 567361/week @ 2024-06-14 615322/week @ 2024-06-21 585384/week @ 2024-06-28 583589/week @ 2024-07-05 585768/week @ 2024-07-12 580316/week @ 2024-07-19 577374/week @ 2024-07-26 557869/week @ 2024-08-02 610084/week @ 2024-08-09 673671/week @ 2024-08-16

每月下载量 2,530,269
5,193 包中使用 (直接使用 23 个)

MIT 许可证

54KB
1K SLoC

plotters-backend - 实现Plotters后端的基础包

这是plotters项目的一部分。有关详细信息,请查看以下链接


lib.rs:

Plotters 后端 API 包。这是 Plotters(Rust 绘图和绘图库)的一部分,有关整个 Plotters 项目的详细信息,请查看 主要包

这是一个用于连接 Plotters 和不同后端包的连接器包。自 Plotters 0.3 版本以来,所有后端都已作为独立的包托管,以提高可用性和可维护性。

同时,Plotters 现在支持第三方后端,所有后端现在都支持“即插即用”:要使用外部后端,只需依赖 Plotters 主要包和第三方后端包即可。

实现 Plotters 后端的注意事项

要创建一个新的 Plotters 后端,应将此包导入到包中,并实现 DrawingBackend 特性。强烈建议第三方后端使用 plotters-backend 通过版本规范 ^x.y.*。有关详细信息,请参阅 兼容性说明

如果后端只实现了 DrawingBackend::draw_pixel,默认的CPU光栅化器将被使用,以便为后端提供绘制不同形状的能力。对于支持高级绘图指令的后端,例如GPU加速的形状绘制,所有提供的特质方法都可以从特定后端代码中重写。

如果您的后端具有文本渲染能力,您可能希望重写 DrawingBackend::estimate_text_size 以避免错误的间距,因为Plotters默认的文本处理代码在文本渲染方面可能与后端行为不同。

动画或实时渲染

后端可能会实时/动画地渲染图像,例如GTK后端用于实时显示或GIF图像渲染。为了支持这些功能,您需要与 ensure_preparedpresent 方法进行交互。以下图显示了Plotters如何操作绘图后端。

  • ensure_prepared - 在Plotters想要绘制之前调用。此函数应初始化后端以供当前帧使用,如果后端已为帧准备就绪,则此函数应简单地不执行任何操作。
  • present - 当Plotters想要完成当前帧绘制时调用
.ensure_prepared() &&
+-------------+    +-------------+    .draw_pixels()             +--------------+   drop
|Start drawing|--->|Ready to draw| ------------------------+---->|Finish 1 frame| --------->
+-------------+    +-------------+                         |     +--------------+
^                  ^                                |            |
|                  +------------------------------- +            |
|                            continue drawing                    |
+----------------------------------------------------------------+
start render the next frame
.present()
  • 对于动画和静态绘制,DrawingBackend::present 表示当前帧应刷新。
  • 对于动画和静态绘制,DrawingBackend::ensure_prepared 在Plotters需要绘制时每次都会调用。
  • 对于静态绘制,DrawingBackend::present 只手动调用一次,或者从后端的Drop实现中调用。
  • 对于动态绘制,帧由 DrawingBackend::present 的调用定义,调用之前的所有内容应属于前一帧。

兼容性说明

从Plotters v0.3开始,Plotters使用“即插即用”模式导入后端,这要求Plotters和后端crates都依赖于同一版本的 plotters-backend crate。此crate (plotters-backend) 将强制执行任何修订版(即版本号中的最后一个数字)都不会包含破坏性更改 - 在Plotters方面和后端方面都是如此。

Plotters主crate始终使用版本规范 plotters-backend = "^<major>.<minor>*" 导入后端crate。强烈建议所有外部crate遵循相同的规则来导入 plotters-backend 依赖,以避免因 plotters-backend crates的修订版更新而导致的潜在破坏。

我们还与 plotters 和一些后端强制执行一个版本规则:兼容的主crate (plotters) 和此crate (plotters-backend) 总是使用相同的次要和主要版本号。所有具有版本“x.y.*”的Plotters主crate和二级后端都应兼容,并且它们应依赖于 plotters-backend x.y.* 的最新版本。

无运行时依赖