slughorn — GPU 矢量图形
摘要
slughorn 是一个现代 C++20 GPU 矢量图形库,实现 Slug 渲染技术,支持从 SVG、FreeType、Skia 等导入,或通过 Canvas API 直接绘制,并上传至 OpenGL、Vulkan、WebGPU、DirectX 等后端,在构建时一次性完成栅格化以减少运行时开销。
<p><a href="https://lobste.rs/s/en7rby/slughorn_gpu_vector_graphics">评论</a></p>
查看缓存全文
缓存时间: 2026/10/28 01:55
# slughorn — GPU 矢量图形
Source: https://slughorn.io/
slughorn (https://slughorn.io/index.html)
- 文档 (https://slughorn.io/#resources)
- 示例 (https://slughorn.io/#examples)
- GitHub ↗ (https://github.com/AlphaPixel/slughorn)
slughorn
## GPU 矢量图形,*重新定义\.*
一个采用现代 C\+\+20 编写的库,实现了 Slug GPU 矢量图形技术。支持导入 SVG、FreeType、Blend2D、Cairo、Skia —— ***也可以直接使用 slughorn 原生 Canvas API 创作图形*** —— 然后上传至 OpenGL、Vulkan、WebGPU、DirectX 等多种后端。
## 文档与链接
## 你需要的一切
```python
import slughorn
# 创建一个图集(GPU 纹理后备存储)
atlas = slughorn.Atlas(2048)
canvas = slughorn.canvas.Canvas(atlas)
# 构建分层复合图形
canvas.begin_composite()
# 深色背景填充
canvas.rect(0.0, 0.0, 1.0, 1.0)
canvas.fill(slughorn.Color(0.12, 0.12, 0.14, 1.0), 1.0)
# 金色渐变圆角面板
canvas.rounded_rect(0.06, 0.06, 0.94, 0.94, 0.09)
gradient = canvas.create_linear_gradient(0.0, 0.0, 1.0, 1.0, [
slughorn.GradientStop(0.0, slughorn.Color(0.55, 0.31, 0.02, 1.0)),
slughorn.GradientStop(1.0, slughorn.Color(1.00, 0.85, 0.35, 1.0)),
])
canvas.fill_gradient(gradient, 1.0)
# 镂空圆形(反向缠绕方向)
canvas.arc(0.5, 0.5, 0.28, 0.0, 2.0 * math.pi, True)
canvas.fill()
canvas.finalize()
# 构建 → 纹理就绪,可供 GPU 上传
atlas.build()
curve_tex = atlas.curve_texture # RGBA32F
band_tex = atlas.band_texture # RGBA16UI
```
```cpp
#include <slughorn/slughorn.hpp>
// Atlas 是 GPU 纹理后备存储
slughorn::Atlas atlas(2048);
slughorn::canvas::Canvas canvas(atlas);
// 双色标金色渐变
auto gradient = canvas.createLinearGradient(
0_cv, 0_cv, 1_cv, 1_cv, {
slughorn::GradientStop{0_cv, {0.55_cv, 0.31_cv, 0.02_cv, 1_cv}},
slughorn::GradientStop{1_cv, {1_cv, 0.85_cv, 0.35_cv, 1_cv}}
}
);
// 构建分层复合图形
canvas.beginComposite();
// 深色背景填充
canvas.rect(0_cv, 0_cv, 1_cv, 1_cv);
canvas.fill({0.12_cv, 0.12_cv, 0.14_cv, 1_cv}, 1_cv);
// 金色渐变圆角面板
canvas.roundedRect(0.06_cv, 0.06_cv, 0.94_cv, 0.94_cv, 0.09_cv);
canvas.fillGradient(gradient, 1_cv);
// 镂空圆形(反向缠绕方向)
canvas.arc(0.5_cv, 0.5_cv, 0.28_cv, 0_cv, 2_cv * slughorn::PI_CV, true);
canvas.fill();
canvas.finalize();
// 构建 → 纹理就绪,可供 GPU 上传
atlas.build();
const auto& curveTex = atlas.getCurveTextureData(); // RGBA32F
const auto& bandTex = atlas.getBandTextureData(); // RGBA16UI
```
Canvas API 镜像了大家熟悉的浏览器 `<canvas>` 元素。复合图形将填充、描边和渐变堆叠进一个可供 GPU 上传的单一图集中,**运行时零细分开销** —— 重活在构建阶段一次性完成,让 GPU 管线保持简洁高效。
相似文章
SDF vs. MSDF vs. Slug:GPU 文字渲染
AlphaPixel 发布了 Slughorn,这是对 Eric Lengyel 提出的 Slug GPU 文字渲染技术的 C++20 实现(于 2026 年 3 月奉献至公有领域),并对比了 SDF、MSDF、纹理图集与 Slug 这几种方案,以在 GPU 上以任意缩放级别渲染清晰的矢量字形。
vgpu
vgpu 是一个针对 WebGPU 的 TypeScript 库,具有类型化着色器导入、一个轻量级的 GPU 优先 API,并兼容浏览器、无头 Node 和测试环境。
编写一个无绑定GPU抽象层
一位开发者分享了他们实现的无绑定GPU抽象层Loon GPU,它基于Vulkan 1.3和Metal 4,灵感来自Sebastian Aaltonen的《No Graphics API》博客文章。该库使用GPU指针、顶点拉取和无绑定纹理堆来简化现代图形API。
Warnock:利用GPU几何放大技术优化矢量图形渲染
本文介绍了Warnock技术,该技术利用GPU几何放大来改进矢量图形渲染,有望提升性能和视觉质量。
使用计算着色器在GPU上进行并行JSON解析
slurpjson是一个Rust库,它完全在GPU上使用wgpu计算着色器解析JSON,将解析过程分解为并行前缀扫描,用于研究目的。