Project Icon

LinaVG

高性能2D矢量图形库 支持抗锯齿和SDF渲染

LinaVG是一个高效的2D矢量图形库,提供抗锯齿凸形状和线条绘制,以及传统和SDF文本渲染功能。支持渐变、轮廓、阴影等多样化样式选项。通过生成优化缓冲区,可轻松集成到自定义后端。适用于构建即时和保留模式GUI应用,具有线程安全特性。支持多种形状、线条和文本渲染选项,是开发高性能2D图形应用的有力工具。



许可证 捐赠 Lina Discord 欢迎贡献 GitHub 问题

LinaVG 是一个 2D 矢量图形库,提供低级功能来绘制各种抗锯齿凸形状和线条,以及传统和有符号距离场(SDF)文本渲染。LinaVG 还提供丰富的样式选项,包括渐变、轮廓、阴影、可变线宽、填充和非填充形状、文本对齐/间距等多种功能!

图片

LinaVG 本身不提供"渲染"功能。它根据您的绘制调用生成缓冲区,并以优化的缓冲区批次将它们发送回您指定的自定义后端。

话虽如此,示例项目提供了一个 OpenGL 后端示例,您基本上可以直接复制粘贴使用。此外,Lina Engine 使用 LinaVG 并有自定义 DirectX12 后端的示例。更多详情请查看 Wiki

功能

LinaVG 的目的是为您提供一种简单的方法来进行低级抗锯齿形状、线条和文本渲染。它不提供任何窗口管理或输入功能,也不是一个 GUI 库。它假设您的应用程序已经设置了图形渲染后端和应用程序循环。

考虑到这一点,您可以使用 LinaVG 构建保留模式和即时模式的 GUI 应用程序/库。

LinaVG 最初是为 Lina Engine 制作的,但这个库完全独立于它。您可以在自己的项目中使用 LinaVG,只需最少的依赖项。

LinaVG 已在以下环境测试:

  • MSVC 14.36.xxx
  • Clang 17.0.1

线程安全

只要没有多个线程修改同一个 LinaVG::Drawer 对象,LinaVG 就是线程安全的。目前唯一不是线程安全的全局函数是那些用于加载字体的函数,这些函数需要用互斥锁包装。

特性

lina

形状

  • 矩形、三角形、多边形、圆形、半圆、弧形、用户定义凸形状
  • 所有形状可以填充或不填充
  • 纯色、垂直/水平/径向渐变
  • 可自定义线宽
  • 纹理、自定义 UV 偏移、自定义 UV 平铺
  • 形状圆角,可选择只对特定角进行圆角处理
  • 自定义旋转

轮廓

  • 内轮廓、外轮廓或两者兼有
  • 可自定义轮廓线宽
  • 纯色、垂直/水平/径向渐变
  • 纹理、自定义 UV 偏移、自定义 UV 平铺

抗锯齿

  • 基于矢量的抗锯齿边框
  • 帧缓冲缩放的抗锯齿线宽
  • 用户自定义抗锯齿乘数

线条

  • 单线条
  • 多线条
  • 贝塞尔曲线
  • 线条端点:左、右和两端
  • 可自定义线条端点圆角
  • 线条连接:顶点平均、斜接、斜角、圆角斜角
  • 所有轮廓选项也适用于线条
  • 仅单线条支持自定义旋转

字体

  • FreeType 字体加载
  • SDF 字体
  • 字体图集,图集合并
  • 自定义字形范围
  • Unicode 支持

文本

  • 传统抗锯齿位图字形渲染
  • 纯色,垂直/水平渐变
  • 阴影,可自定义阴影颜色和偏移
  • 字符间距
  • 行间距
  • 自动换行
  • 文本对齐:左对齐、右对齐和居中
  • 自定义旋转

SDF

  • 所有文本选项适用于 SDF 文本
  • SDF 厚度
  • SDF 柔和度
  • SDF 轮廓

实用工具

  • 自定义绘制顺序,Z 轴排序
  • 矩形裁剪
  • 暴露的配置,如:垃圾回收间隔、缓冲区预留、抗锯齿参数、线条连接限制、纹理翻转、调试功能

安装

Releases 下载发布版本。

推荐使用 CMake 将 LinaVG 与您的应用程序一起链接。或者,您也可以自行构建 CMake 项目并链接生成的二进制文件,但请注意如果选择这种方式,您还需要链接生成的 FreeType 二进制文件。

使用 LINAVG_BUILD_EXAMPLES 选项构建示例项目。

cmake DLINAVG_BUILD_EXAMPLES=ON

使用 LINAVG_DISABLE_TEXT_SUPPORT 选项跳过文本支持和 FreeType 依赖。

cmake DLINAVG_DISABLE_TEXT_SUPPORT=ON

注意:LinaVG 需要 C++ 17 特性。

快速演示

以下是使用 LinaVG 进行绘图的最基本实现步骤。如主页所述,假设您的应用程序已经设置并运行了图形渲染后端,当然还包括一个具有有效上下文的窗口。


#include "LinaVG.hpp"

LinaVG::Drawer lvgDrawer;
lvgDrawer.GetCallbacks().drawDefault = std::bind(&MyRenderingBackend::DrawDefault, &myRenderer, std::placeholders::_1);

// 您的应用程序循环
while (m_applicationRunning)
{
    // 设置样式,从红色到蓝色的渐变色
    StyleOptions style;
    style.isFilled      = true;
    style.color.start = Vec4(1, 0, 0, 1);
    style.color.end   = Vec4(0, 0, 1, 1);

    // 从 (300, 300) 开始绘制一个 200x200 的矩形
    const Vec2 min = Vec2(300, 300);
    const Vec2 max = Vec2(500, 500);
    lvgDrawer.DrawRect(min, max, style);

    lvgDrawer.FlushBuffers();
    lvgDrawer.ResetFrame();
}

就是这么简单!

1

LinaVG 在使用、配置、其他形状/线条/文本和样式方面还有很多内容。查看 Wiki 的其余部分或示例应用程序以了解所有内容。

许可证 (BSD 2-clause)

版权所有 [2022-] Inan Evin

在遵守以下条件的情况下,允许以源代码和二进制形式重新分发和使用,无论是否经过修改:

  1. 源代码的再分发必须保留上述版权声明、本条件列表和以下免责声明。

  2. 以二进制形式再分发时,必须在随分发提供的文档和/或其他材料中复制上述版权声明、本条件列表和以下免责声明。

本软件由版权所有者和贡献者"按原样"提供,不提供任何明示或暗示的保证,包括但不限于对适销性和特定用途适用性的暗示保证。在任何情况下,版权持有人或贡献者均不对任何直接、间接、偶然、特殊、示例性或后果性损害(包括但不限于替代商品或服务的采购;使用、数据或利润的损失;或业务中断)承担责任,无论是基于合同、严格责任还是侵权行为(包括疏忽或其他)的任何责任理论,即使事先被告知可能发生此类损害。

贡献

欢迎任何贡献和拉取请求。

支持

Lina Discord

您可以加入 Lina Engine的Discord频道 讨论Lina项目。

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号