SilkyNvg.Rendering.OpenGL 1.2.0

dotnet add package SilkyNvg.Rendering.OpenGL --version 1.2.0                
NuGet\Install-Package SilkyNvg.Rendering.OpenGL -Version 1.2.0                
此命令旨在在 Visual Studio 的包管理器控制台中使用,因为它使用了 NuGet 模块的 Install-Package 版本。
<PackageReference Include="SilkyNvg.Rendering.OpenGL" Version="1.2.0" />                
对于支持 PackageReference 的项目,请将此 XML 节点复制到项目文件中以引用此包。
paket add SilkyNvg.Rendering.OpenGL --version 1.2.0                
#r "nuget: SilkyNvg.Rendering.OpenGL, 1.2.0"                
#r 指令可以在 F# Interactive 和 Polyglot Notebooks 中使用。将此复制到交互式工具或脚本的源代码中以引用包。
// Install SilkyNvg.Rendering.OpenGL as a Cake Addin
#addin nuget:?package=SilkyNvg.Rendering.OpenGL&version=1.2.0

// Install SilkyNvg.Rendering.OpenGL as a Cake Tool
#tool nuget:?package=SilkyNvg.Rendering.OpenGL&version=1.2.0                

SilkyNvg

NuGet

NanoVectorGraphicsExceptItUsesSilkNETNowWooHoo (感谢 KoziLord 提供的描述) (将 memononen/nanovg 端口到 .NET8.0)

SilkyNvg 是一个小型库,提供基本的二维绘图功能,非常适合 UI 和其他此类应用程序。它提供基本的形状功能,如矩形或圆形,以及构建自定义路径的能力,这些路径可以是填充的或描边的(线条)。颜色可以是颜色(SilkyNvg.Colour)、画笔(SilkyNvg.Paint)或图像(SilkyNvg.Paint)。除此之外,还提供了一个简单的文本绘图 API。有关详细信息,请参阅 FontStash.NET

使用/例子

在 'samples' 目录中可以找到 NanoVG 例子。

初始化和渲染

要创建一个新的 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、颜色和绘制 所有组件都通过其各自命名空间中的扩展方法链接到 SilkyNvg.Nvg

渲染器

在创建 Nvg 实例时指定渲染器,使用 Nvg.Create。SilkyNvg 默认提供 Vulkan 和 OpenGL 渲染器,但可以通过使用 SilkyNvg.Rendering.INvgRenderer 接口轻松构建自定义渲染器。渲染器在其构造函数中通常接受 CreateFlags 标记集,用于指定特定于渲染器的设置。

抗锯齿

如果将 SilkyNvg.Rendering.INvgRenderer.EdgeAntiAlias 设置为 true,SilkyNvg 会自动计算抗锯齿顶点。这是因为某些渲染器可能不支持抗锯齿。在自定义渲染器中,通过 CreateFlags 指定是否执行抗锯齿。

OpenGL 渲染器

OpenGL 渲染器 的构造函数接受两个参数;SilkyNvg.Rendering.OpenGL.CreateFlagsSilk.NET.OpenGL.GL。第二个参数是 OpenGL 的 API 实例,CreateFlags 标记集有以下选项

  • CreateFlags.Antialias 表明渲染器应该绘制抗锯齿或原始网格。
  • CreateFlags.StencilStrokes 表明渲染器在绘制 strokes(线条)时应该使用模板缓冲区。
  • CreateFlags.Debug 表明渲染器应该打印错误。

Vulkan 渲染器

Vulkan 渲染器 的构造函数接受三个参数:SilkyNvg.Rendering.Vulkan.CreateFlagsSilkyNvg.Rendering.Vulkan.VulkanRendererParamsSilk.NET.Vulkan.VK。最后一个参数是 Vulkan 的 API 实例。

SilkyNvg.Rendering.Vulkan.CreateFlags 标记集有以下选项

  • CreateFlags.Antialias 表明渲染器应该绘制抗锯齿或原始网格。
  • CreateFlags.StencilStrokes 表明渲染器在绘制 strokes(线条)时应该使用模板缓冲区。
  • 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 是否应被解释为 RGBAAlpha 值。返回新图像的句柄。
  • 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 已计算。
兼容的目标框架
包含的目标框架(在包中)
更多关于目标框架.NET Standard的信息。

NuGet 包

该包没有被任何 NuGet 包使用。

GitHub 仓库

该包没有被任何流行的 GitHub 仓库使用。

版本 下载 最后更新
1.2.0 106 5/22/2024
1.1.0 189 4/24/2024
1.0.8 100 4/16/2024
1.0.7 115 3/8/2024
1.0.5 195 11/17/2023
1.0.4 99 11/13/2023
1.0.3 393 10/15/2021

修复了包恢复问题。