SilkyNvg 1.2.0
dotnet add package SilkyNvg --version 1.2.0
NuGet\Install-Package SilkyNvg -Version 1.2.0
<PackageReference Include="SilkyNvg" Version="1.2.0" />
paket add SilkyNvg --version 1.2.0
#r "nuget: SilkyNvg, 1.2.0"
// Install SilkyNvg as a Cake Addin #addin nuget:?package=SilkyNvg&version=1.2.0 // Install SilkyNvg as a Cake Tool #tool nuget:?package=SilkyNvg&version=1.2.0
SilkyNvg
SilkyNvg 是一个小型库,提供基本的 2D 绘图功能,非常适合 UI 和其他类似应用程序。它提供基本的形状功能,如矩形或圆圈,以及构建自定义路径的能力,可以是填充或描边(线条)。颜色可以是颜色(SilkyNvg.Colour
)、画笔(SilkyNvg.Paint
)或图像(SilkyNvg.Paint
)。在此基础上,还提供了一个简单的文本绘制 API。有关详细信息,请参阅 FontStash.NET。
SilkyNvg 使用示例可以在此目录下的 'samples' 中找到。
使用方法和示例
NanoVG 示例的转录可以在 'samples' 目录中找到。
初始化和渲染
要创建新的 Nvg 实例,必须指定 SilkyNvg.Rendering.INvgRenderer
的实现,然后可以按如下方式创建实例:Nvg nvg = Nvg.Create(renderer);
。
所有对渲染 API 的调用必须介于 Nvg.BeginFrame(width, height, pixelRatio);
和 Nvg.EndFrame();
之间。要从一个基于像素的坐标系转换到任何其他坐标系,宽度和高度可以具有任何值,而与实际窗口大小无关。
实现分为不同的组件,这些组件包括
- SilkyNvg.Blending 全局混合
- SilkyNvg.Graphics 渲染样式
- SilkyNvg.Images 图像
- SilkyNvg.Paths 创建和绘制路径
- SilkyNvg.Scissoring 用于自定义剪刀
- SilkyNvg.Text 用于文本
- SilkyNvg.Transforms 用于创建和修改变换
- SilkyNvg 用于核心方法,如 BeginFrame、DebugDumpCache、Colour 和 Paint 所有组件都通过各自命名空间中的扩展方法链接到
SilkyNvg.Nvg
。
渲染器
在 Nvg.Create
中创建 Nvg 实例时指定渲染器。SilkyNvg 默认提供 Vulkan 和 OpenGL 渲染器,但可以使用 SilkyNvg.Rendering.INvgRenderer
接口轻松构建自定义渲染器。渲染器通常通过构造函数中的 CreateFlags
掩码来获取渲染器特定的设置。
抗锯齿
如果将 SilkyNvg.Rendering.INvgRenderer.EdgeAntiAlias
设置为 true,则 SilkyNvg 会自动计算抗锯齿顶点。这是因为某些渲染器可能不支持抗锯齿。在自定义渲染器中, Creat eagrs 用于指定是否进行抗锯齿。
OpenGL 渲染器
OpenGL 渲染器 的构造函数接收两个参数;SilkyNvg.Rendering.OpenGL.CreateFlags
和 Silk.NET.OpenGL.GL
。第二个参数是 OpenGL 的 API 实例,CreateFlags
掩码具有以下选项
CreateFlags.Antialias
表示渲染器应绘制抗锯齿或原始网格。CreateFlags.StencilStrokes
表示渲染器在绘制笔画(线条)时是否使用模板缓冲区。CreateFlags.Debug
表示渲染器是否应打印错误。
Vulkan 渲染器
Vulkan 渲染器 的构造函数接收 3 个参数:SilkyNvg.Rendering.Vulkan.CreateFlags
、SilkyNvg.Rendering.Vulkan.VulkanRendererParams
和 Silk.NET.Vulkan.VK
。最后一个参数是 Vulkan 的 API 实例。
SilkyNvg.Rendering.Vulkan.CreateFlags
掩码具有以下选项
CreateFlags.Antialias
表示渲染器应绘制抗锯齿或原始网格。CreateFlags.StencilStrokes
表示渲染器在绘制笔画(线条)时是否使用模板缓冲区。CreateFlags.TriangleListFill
不会使用VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN
,因为它不得到普遍支持。性能略有下降。CreateFlags.Debug
表示渲染器是否应打印错误。
SilkyNvg.Rendering.Vulkan.VulkanRendererParams
结构
VulkanRendererParams.PhysicalDevice
物理设备。VulkanRendererParams.Device
与所指定的物理设备匹配的设备。VulkanRendererParams.AllocationCallbacks
一个指向潜在 AllocationCallbacks 的安全 IntPtr。如果没有使用,则使用IntPtr.Zero
或将其留空。VulkanRendererParams.InitialCommandBuffer
可以指定要绘制的命令缓冲区。如果设置此值,则每帧更新命令缓冲区不再必要。VulkanRendererParams.FrameCount
同时可以绘制的帧数。 (没有多线程!)VulkanRendererParams.AdvanceFrameIndexAutomatically
如果在绘制帧后自动递增使用的帧索引。循环回到 0。VulkanRendererParams.RenderPass
渲染通道。VulkanRendererParams.SubpassIndex
要使用的子通道索引。VulkanRendererParams.ImageQueueFamily
用于图像布局转换和缓冲区复制的队列家族。必须支持VK__QUEUE_GRAPHICS_BIT
。VulkanRendererParams.ImageQueueFamilyIndex
应从其中创建运行上述操作的队列的索引。
其他详细信息
有关详细信息,请参阅 NanoVG 文档,因为 API 和实施是有意保持相似的。
自定义渲染器实现
要创建自定义渲染器实现,渲染器类必须实现 SilkyNvg.Rendering.INvgRenderer
。此接口包含以下方法和属性
INvgRenderer
bool EdgeAntiAlias
当创建渲染器时是否启用了抗锯齿。可以取决于是否支持抗锯齿以及是否在实例化渲染器时指定了其使用。bool Create()
当 NanoVG 初始化时调用。在此处初始化渲染器。如果初始化失败,则返回 false,否则返回 true。int CreateTexture(Texture type, Vector2D< uint > size, ImageFlags imageFlags, ReadOnlySpan< byte > data)
被调用来创建一个新的图像。 type 参数指定 data 应该被解释为 RGBA 或 Alpha 值。返回新图像的句柄。bool DeleteTexture(int image)
被调用来删除图像。如果没有找到图像返回 false,否则返回 true。bool UpdateTexture(int image, Rectangle< uint > bounds, ReadOnlySpan< byte > data)
更新图像的特定部分为新 data。如果图像未找到返回 false,否则返回 true。bool GetTextureSize(int image, out Vector2D< uint > size)
返回指定图像的大小。如果图像未找到返回 false,否则返回 true。void Viewport(Vector2D< float > size, float devicePxRatio)
在每次调用Nvg.BeginFrame
期间每帧调用一次,用于设置视口大小和像素比。void Cancel()
停止绘图帧。清除所有缓存数据。void Flush()
绘制帧。渲染这里的一切。void Fill(Paint paint, CompositeOperationState compositeOperation, Scissor scissor, float fringe, Box2D< float > bounds, IReadOnlyList< Path > paths)
在Nvg.Fill()
上调用。表示当刷新时,应将 paths 中的数据添加到渲染中。Stroke(Paint paint, CompositeOperationState compositeOperation, Scissor scissor, float fringe, float strokeWidth, IReadOnlyList< Path > paths)
在Nvg.Stroke()
上调用。表示当刷新时,应将 paths 中的数据添加到渲染中。Triangles(Paint paint, CompositeOperationState compositeOperation, Scissor scissor, ICollection< Vertex > vertices, float fringeWidth)
在渲染文本时调用。表示应该在刷新时将 vertices 添加到渲染中。void Dispose()
删除并关闭渲染器。
产品 | 版本 兼容的和额外的计算目标框架版本。 |
---|---|
.NET | net8.0 兼容。 net8.0-android 已计算。 net8.0-browser 已计算。 net8.0-ios 已计算。 net8.0-maccatalyst 已计算。 net8.0-macos 已计算。 net8.0-tvos 已计算。 net8.0-windows 已计算。 |
-
net8.0
- SilkyNvg.Blending (>= 1.0.0)
- SilkyNvg.Core (>= 1.0.0)
- SilkyNvg.Graphics (>= 1.0.0)
- SilkyNvg.Images (>= 1.0.0)
- SilkyNvg.Paths (>= 1.0.0)
- SilkyNvg.Rendering (>= 1.0.0)
- SilkyNvg.Scissoring (>= 1.0.0)
- SilkyNvg.Text (>= 1.0.0)
- SilkyNvg.Tools (>= 1.0.0)
- SilkyNvg.Transforms (>= 1.0.0)
NuGet 包 (2)
显示依赖于 SilkyNvg 的顶级 2 个 NuGet 包
包 | 下载 |
---|---|
SilkyNvg.Rendering.OpenGL
将memononen/nanovg移植到.NET 5.0,主要围绕Silk.NET框架。 |
|
SilkyNvg.Rendering.Vulkan
将memononen/nanovg移植到.NET 5.0,主要围绕Silk.NET框架。 |
GitHub代码仓库
此包未被任何流行的GitHub代码仓库使用。
升级到.NET 8.0 LTS