GTK 中添加了新的 OpenGL 和 Vulkan 渲染引擎

GTK 库的开发人员宣布推出两种新的渲染引擎——“ngl”和“vulkan”,它们使用 OpenGL(GL 3.3+ 和 GLES 3.0+)和 Vulkan 图形 API。新引擎包含在 GTK 4.13.6 的实验版本中。在实验性 GTK 分支中,现在默认使用 ngl 引擎,但如果在下一个稳定分支 4.14 中发现重大问题,旧的“gl”渲染引擎将被恢复。

新引擎被统一定位并由单一代码库组装而成。统一的本质是,以Vulkan API为基础,在其之上为OpenGL创建了一个单独的抽象层次,同时考虑到OpenGL和Vulkan之间的差异。这种方法使得在两个引擎中使用通用基础设施来处理场景图、转换、缓存纹理和字形成为可能。统一还显着简化了两个引擎代码库的维护,并使它们保持最新和同步。

与旧的 gl 引擎不同,旧的 gl 引擎为每种类型的渲染节点使用单独的简单着色器,并在离屏渲染期间定期重新排序数据,而新引擎不使用离屏渲染,而是使用复杂的着色器 (ubershader) 来解释缓冲区中的数据。就目前的形式而言,新实施在优化水平方面仍然落后于旧实施,因为现阶段的主要重点是正确操作和易于维护。

旧版 gl 引擎中缺少的新功能:

  • 轮廓平滑 - 允许您保留精细细节并实现更平滑的轮廓。
    GTK 中添加了新的 OpenGL 和 Vulkan 渲染引擎
  • 形成任意渐变,可以使用任意数量的颜色和抗锯齿(在 gl 引擎中,仅支持具有 6 个停止颜色的线性、径向和圆锥形渐变)。
    GTK 中添加了新的 OpenGL 和 Vulkan 渲染引擎
  • 小数比例,允许您设置非整数比例值,例如,当对 125x1200 的窗口使用 800% 的比例时,将分配 1500x1000 的缓冲区,而不是像旧引擎中那样分配 2400x1600。
  • 支持 DMA-BUF 技术,以使用多个 GPU 并将各个操作卸载到另一个 GPU。
  • 许多在旧实现中存在问题的渲染节点都得到了正确处理。

新引擎的局限性包括缺乏对非整数值(小数位置)和 glshader 节点定位的支持,这些与旧引擎的功能紧密相关,在添加对带有遮罩(mask)的节点和带有透明度的纹理。还提到,由于使用驱动程序的方法发生变化,图形驱动程序可能会出现问题。

未来,基于新的统一模型,不排除在 macOS 中使用 Metal 和在 Windows 中使用 DirectX 创建渲染引擎,但由于着色器使用其他语言(“ngl”),因此此类引擎的创建会变得复杂。 ”和“vulkan”引擎使用 GLSL 语言,因此对于 Metal 和 Direct 必须复制着色器或使用基于 SPIRV-Cross 工具包的层)。

未来的计划包括提供 HDR 支持和正确颜色管理的工具、对 GPU 端路径渲染的支持、渲染字形的能力、流外渲染以及针对旧设备和低功耗设备的性能优化。在目前的形式下,“vulkan”发动机的性能接近旧型“gl”发动机的性能。 “ngl”引擎的性能不如旧的“gl”引擎,但可用的性能足以以 60 或 144 FPS 进行渲染。预计优化后情况会有所改变。

来源: opennet.ru

添加评论