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 向矢量 GPU 发送命令和数据,以加速方式渲染场景图,从而减轻 CPU 的图形渲染负担。许多操作(如矩形和字体字形的渲染)非常适合 OpenVG,因为它们可以表示为路径,这些路径可以被描边和填充。通常涉及纹理的场景图项在 OpenVG 渲染器中使用 VGImage 进行处理。此外,当您渲染到离屏表面(如使用图层)时,场景子树会渲染到一个 VGImage,该图像可以在场景中重复使用。
渲染循环¶
OpenVG 渲染器镜像了基本渲染循环的行为,并且它在单一线程中运行所有 OpenVG 命令。
有关渲染循环的更多信息,请参阅 Qt Quick Scene Graph 。
着色器效果¶
ShaderEffect 组件在 QtQuick 2 中无法通过 OpenVG 适配进行渲染。虽然可以使用 ShaderEffectSource 和 QML 项目层(它们都是离屏表面),但无法通过 ShaderEffect 项目对它们应用着色器效果。这是因为 OpenVG 缺乏用于应用每个顶点和每个片段着色器操作的 API。然而,您可以利用 OpenVG API 中的图像滤镜操作来获得类似于 ShaderEffects 在自定义项目中提供的效果。要集成自定义 OpenVG 渲染,请结合使用 QSGRenderNode 和 QSGRendererInterface。
粒子效果¶
无法使用OpenVG适配渲染粒子效果。尽可能从场景中完全移除粒子。否则,即使它们不可见,仍然需要一些处理。
渲染文本¶
使用OpenVG适配的文本渲染基于渲染字形路径,并且不像OpenGL后端那样使用距离场技术。
透视变换¶
OpenVG API 不允许使用非仿射变换来变换路径,但在 Qt Quick 中这是可能的。因此,当你在应用透视变换的同时使用路径(如矩形和文本)渲染组件时,OpenVG 后端会先渲染到 VGImage,然后再应用变换。这种行为在运行时会占用更多内存并花费更多时间;如果可能,请尽量避免。