SilkyNvg.Rendering.Vulkan 1.2.0
dotnet add package SilkyNvg.Rendering.Vulkan --version 1.2.0
NuGet\Install-Package SilkyNvg.Rendering.Vulkan -Version 1.2.0
<PackageReference Include="SilkyNvg.Rendering.Vulkan" Version="1.2.0" />
paket add SilkyNvg.Rendering.Vulkan --version 1.2.0
#r "nuget: SilkyNvg.Rendering.Vulkan, 1.2.0"
// Install SilkyNvg.Rendering.Vulkan as a Cake Addin #addin nuget:?package=SilkyNvg.Rendering.Vulkan&version=1.2.0 // Install SilkyNvg.Rendering.Vulkan as a Cake Tool #tool nuget:?package=SilkyNvg.Rendering.Vulkan&version=1.2.0
SilkyNvg
NanoVectorGraphicsExceptItUsesSilkNETNowWooHoo (感谢 KoziLord 提供的描述) (memononen/nanovg 的 .NET 8.0 端口)
SilkyNvg 是一个小型库,提供基本的 2D 绘图功能,非常适合 UI 和其他类似应用程序。它提供基本的形状功能,如矩形或圆形,以及构建自定义路径的能力,这些路径可以是填充的或描边的(线条)。颜色可以是颜色(《SilkyNvg.Colour》),绘制(《SilkyNvg.Paint》),或图片(《SilkyNvg.Paint》)。在此基础上,还提供了一个简单的文本绘制 API。有关更多信息,请参阅 FontStash.NET。
用途/示例
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、颜色和Paint 所有组件都通过各自命名空间中的扩展方法链接到
SilkyNvg.Nvg
。
渲染器
渲染器在创建 Nvg 实例时通过 Nvg.Create
进行指定。SilkyNvg 提供了内置的 Vulkan-和 OpenGL-渲染器,但可以通过使用 SilkyNvg.Rendering.INvgRenderer
接口轻松构建自定义渲染器。标准做法是在构造函数中接收一个用于指定渲染器特定设置的 CreateFlags
掩码。
抗锯齿
如果将 SilkyNvg.Rendering.INvgRenderer.EdgeAntiAlias
设置为 true,SilkyNvg 将自动计算抗锯齿顶点。这样做的原因是某些渲染器可能不支持抗锯齿。在自定义渲染器中,CreateFlags 指定是否应进行抗锯齿。
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
不使用,因为这不是普遍支持的。性能会略有下降。 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
- Silk.NET.Maths (>= 2.21.0)
- Silk.NET.Vulkan (>= 2.21.0)
- SilkyNvg (>= 1.2.0)
NuGet 包
此包不依赖于任何 NuGet 包。
GitHub 仓库
此包不依赖于任何流行的 GitHub 仓库。
修复了包恢复问题。