图形卸载功能继续改进

我们在去年秋季首次引入了对 dmabuf 和图形卸载的支持,该功能已包含在 GTK 4.14 中。自从上次讨论以来,又发生了一些改进,因此现在是时候进行另一次更新了。

变换

当您旋转显示器时,它的宽高比会从横向(例如,1920 x 1200)更改为纵向(1200 x 1920)。但是合成器处理的帧缓冲区仍然是 1920 x 1200。

在某些其他情况下,内容可能需要在显示之前进行一些转换。例如,当显示来自前置摄像头的视频流时。

D4 cycle graph

到目前为止,GTK 一直将翻转或旋转的纹理视为不可卸载,但在最近的一些改进之后,我们现在将在卸载内容时将此类转换传递给合成器。

快速绕道

这是一个很好的机会来解释一下,GTK 变换 API 依赖于*您*提供分类到有用的类别,例如 2D 平移、缩放、旋转或任意 3D 变换。

因此,最好使用诸如 gsk_transform_rotategsk_transform_translate 之类的特定方法,而不是自己计算变换矩阵并使用 gsk_transform_matrix,后者不会向我们提供任何关于我们正在处理的变换类型的信息。如果没有此信息,我们就会错过诸如上述变换卸载之类的优化。

Benjamin 在这里简要概述了我们的转换方法。

纹理

卸载工作的最初目标是启用 dmabuf 内容的直通。但是,通常情况下我们并不能直接获得 dmabuf 内容。我们更常见的是收到 GL 纹理中的内容(例如,来自 gstreamer)。值得庆幸的是,mesa 具有 GL 扩展,可以让我们将纹理导出为 dmabuf。我们最近使用此功能启用了 GL 纹理的卸载。

请注意,这些扩展可能并非在所有地方都可用,并且个别驱动程序在 dmabuf 支持方面可能会遇到问题。

总结

在即将发布的 GTK 4.16 版本中,图形卸载应该会更频繁地工作。

您可以立即尝试这些改进,例如,在新的 Showtime 应用程序的 每日构建版本

Showtime