1 min read

Rust 製の CPU 特化型 2D ベクターグラフィックスライブラリを公開しました

Raden という CPU に特化した 2D ベクターグラフィックスライブラリを公開したので、色々雑に書いて行きます。

モチベーション

そもそもなんで Rust で 2D グラフィクスベクターライブラリを作ってるのか?という話ですが、リアルタイムなダミー映像を生成するためです。

重要なポイントはこのダミー映像は GitHub Actions での利用を想定しています。つまり基本的に CPU しか利用できない状況である程度複雑かつ高解像度で高フレームレートな映像を超高速に生成する必要があります。

もともと Blend2D という高速な CPU 特化型の 2D ライブラリを利用しており、Python でも blend2d-py というライブラリを開発していたりするのですが、Rust であれば 1 から書いても面白いのではないか?と考え実装してみることにしました。ちなみに JIT や SIMD に関しては wasmtimecranelift を採用しています。

Raden

ライブラリは機能名そのままの名前を付けることが多いのですが、今回はあえて名前を付けてみました。Raden です。螺鈿。

GitHub - shiguredo/raden: Cranelift JIT-powered 2D vector graphics library in Rust
Cranelift JIT-powered 2D vector graphics library in Rust - shiguredo/raden

色々頑張った結果、実際 1080p 120fps (約 8 Gbps) の生データを無事生成できるようになりました。むしろ再生側が色々大変でした。

0:00
/0:05
8bit の GBRA なので約 8 Gbps

Blend2D API に寄せる

Blend2D は本当に素晴らしいライブラリなので、できるだけ Blend2D API に寄せてあります。Blend2D の経験者であれば気軽に利用できることを意識してます。

直接的な依存は Cranelift のみ

Raden は依存を少なく実装するというのも目的にしています。実際依存しているのは Cranelift 系のクレートのみです。今後増やす予定はありません。

GPU への対応

GPU への対応は興味はあるのですが Raden 自体は CPU 特化型でいきます。そもそも wgpu 使えばいいのでは ... という気持ちがあります。