#矢量图形 #图形 #跨平台 #UI #抗锯齿 #游戏开发 #2D 矢量

nonaquad

基于 miniquad 的 Android、WebGL、iOS、Windows、Linux 和 Mac 的矢量抗锯齿图形渲染器

3 个版本

0.1.2 2021 年 8 月 30 日
0.1.1 2021 年 7 月 26 日
0.1.0 2021 年 7 月 26 日

#116 in 渲染

MIT/Apache

200KB
5K SLoC

nonaquad

基于 Rust 的 Android、WASM、桌面矢量抗锯齿图形渲染器,使用 miniquad。

这个库最初是将 NanoVG 移植到 miniquad 的项目。如果您想快速实验(游戏、绘画应用程序等)或者想在上面构建其他库(例如 UI 库),请使用此库。

目标

  • 移动、桌面和 Web 的小型快速可执行文件。
  • 安全性
  • 高质量的绘图:着色器中的抗锯齿、圆角矩形、渐变、快速模糊
  • 所有平台上一键或直接构建
  • 易于使用
  • 最小依赖项

支持的平台

  • Windows,OpenGl 3
  • Linux,OpenGl 3
  • macOS,OpenGL 3
  • WASM,WebGl1 - 在 ios safari、ff、chrome 上测试过
  • Android,GLES3

不支持但希望支持的平台

  • Android,GLES2 - 进行中。
  • Metal。非常希望。
  • 树莓派 - 进行中

示例

位于 nonaquad/examples

从以下示例开始: cargo run --example drawaa

nona.begin_path();
nona.rect((100.0, 100.0, 300.0, 300.0));
nona.fill_paint(nona::Gradient::Linear {
    start: (100, 100).into(),
    end: (400, 400).into(),
    start_color: nona::Color::rgb_i(0xAA, 0x6C, 0x39),
    end_color: nona::Color::rgb_i(0x88, 0x2D, 0x60),
});
nona.fill().unwrap();

let origin = (150.0, 140.0);
nona.begin_path();
nona.circle(origin, 64.0);
nona.move_to(origin);
nona.line_to((origin.0 + 300.0, origin.1 - 50.0));
nona.stroke_paint(nona::Color::rgba(1.0, 1.0, 0.0, 1.0));
nona.stroke_width(3.0);
nona.stroke().unwrap();

nona.end_frame().unwrap();

屏幕截图

从上述示例生成的屏幕截图。

Windows

Windows

Web

WebGL

在 size stripping 之前 WASM 的大小为 640KB - 应该足够每个人使用。

Android

APK 大小:134KB

iOS

(尚未准备就绪)

构建

Linux

# ubuntu system dependencies
apt install libx11-dev libxi-dev libgl1-mesa-dev

cargo run --example drawaa

Windows

# both MSVC and GNU target is supported:
rustup target add x86_64-pc-windows-msvc
# or
rustup target add x86_64-pc-windows-gnu 

cargo run --example drawaa

WASM

rustup target add wasm32-unknown-unknown
cargo build --example drawaa --target wasm32-unknown-unknown && copy ".\target\wasm32-unknown-unknown\debug\examples\drawaa.wasm" ".\examples\drawaa.wasm" /y

cd examples
npm i -g simplehttpserver
simplehttpserver

然后打开 https://127.0.0.1:8000

Android

推荐用于 Android 的构建方式是使用 Docker。
miniquad 使用稍作修改的 cargo-apk 版本。

注意:在 Windows 上,如果在 cargo apk build --example drawaa 期间出现 git 错误,请更新您的 .git 文件夹以使其不是只读的。参见相关的 Docker 问题 #6016

docker run --rm -v $(pwd)":/root/src" -w /root/src notfl3/cargo-apk cargo apk build --example drawaa
docker run -it -v %cd%":/root/src" -w /root/src notfl3/cargo-apk bash

APK 文件将位于 target/android-artifacts/(debug|release)/apk

启用“log-impl”功能后,所有日志调用都将转发到adb控制台。无需对Android进行代码修改,一切正常工作。

iOS

尚未支持

路线图

nvg-miniquad的目标是在移动、Web和桌面端使用相同的源代码构建一个稳定、高质量的矢量库。

我将将其用作通用跨平台应用框架的构建模块。

功能

  • 抗锯齿线、圆、矩形、圆角矩形(有符号距离场)、曲线
  • 多边形 - 凸和凹
  • 渐变
  • 裁剪
  • 抗锯齿文本
  • [进行中] 图像和纹理
  • 高质量快速阴影和模糊
  • 渐变 - 高质量抖动
  • 圆球

架构

这就是各个部分如何组合在一起

Architecture

贡献

请参阅源代码中的TODO-s或任何其他内容

许可证

MIT或Apache,任选其一

依赖项

约20MB
~228K SLoC