Qt Quick OpenVG 适配#

OpenVG 适配是一个用于 Qt Quick 2 的备选渲染器,它使用 OpenVG 命令渲染场景图内容,以提供硬件加速的 2D 向量和光栅图形。与 软件适配器 类似,一些功能和优化不再可用。尽管如此,大多数 Qt Quick 2 应用程序可以无修改运行,任何尝试使用不受支持的特性将被忽略。

EGL 需要#

与默认的 OpenGL 渲染器不同,没有内置功能来获取 OpenVG 上下文。这意味着渲染器负责请求和管理当前上下文。为此,你需要在 OpenVG 渲染器中直接使用 EGL。因此,OpenVG 渲染器只能与支持创建带有 QSurfaceFormat::OpenVG 支持的 QWindows 的平台插件一起使用。从该窗口,渲染器可以获取一个 EGLSurface,然后可以用它来与 EGLContext 一起渲染 OpenVG 内容。

渲染器#

OpenVG 渲染器使用 OpenVG API 发送命令和数据到渲染场景图的 Vector GPU,从而加速图形渲染,并将渲染工作从 CPU 中卸载。许多操作,如矩形和字体图元的渲染,都非常适合 OpenVG,因为它们可以表示为路径,并通过描边和填充进行操作。涉及纹理的场景图项的渲染在 OpenVG 渲染器中使用 VGImage 处理。此外,当您将渲染到离屏表面(如与层一起)时,场景子树被渲染到 VGImage,这可以在场景中重复使用。

渲染循环#

OpenVG 渲染器反映了基本渲染循环的行为,它在一个线程中运行所有 OpenVG 命令。

有关渲染循环的更多信息,请参阅 Qt Quick 场景图

着色器效果#

QtQuick 2 中的 ShaderEffect 组件无法由 OpenVG 适配渲染。虽然可以使用 ShaderEffectSource 和 QML Item Layers(二者都是离屏表面),但无法通过 ShaderEffect 项目对它们应用着色器效果。这是因为在 OpenVG 中缺少对 per vertex 和 per fragment 着色器操作的应用程序的 API。但是,您可能可以利用 OpenVG API 中的图像过滤操作来获得类似于 ShaderEffects 在自定义项目提供的效果。要集成自定义 OpenVG 渲染,请结合使用 QSGRenderNodeQSGRendererInterface

粒子效果#

使用OpenVG适配器渲染粒子效果是不可能的。尽可能完全从场景中移除粒子。否则,即使它们不可见,仍然需要进行一些处理。

渲染文本#

使用OpenVG适配器进行文本渲染基于渲染字符路径,与基于OpenGL后端不同,不使用距离场技术。

透视变换#

OpenVG API不允许使用非仿射变换对路径进行变换,但Qt Quick可以实现。因此,当使用路径(如矩形和文本)并在应用透视变换时进行渲染,OpenVG后端会首先渲染到VGImage,然后再应用变换。这种行为会占用更多的运行时内存并花费更多时间;如果可能,请避免此操作。