ShaderEffectSource QML Type
将一个 Qt Quick 对象渲染为纹理并显示出来。更多...
| Import Statement: | import QtQuick |
| Inherits: |
属性
- format : enumeration
- hideSource : bool
- live : bool
- mipmap : bool
- recursive : bool
- samples : int
- sourceItem : Item
- sourceRect : rect
- textureMirroring : enumeration
- textureSize : size
- wrapMode : enumeration
方法
- void scheduleUpdate()
详细说明
ShaderEffectSource 类型将“sourceItem ”渲染为纹理,并在场景中显示。sourceItem 会被渲染到纹理中,就好像它是一个完全不透明的根项一样。因此,sourceItem 本身可以不可见,但仍然会出现在纹理中。
您可以将 ShaderEffectSource 用作:
- ShaderEffect 中的纹理源。这使您能够对任何 Qt Quick 对象。
- 复杂对象的缓存。该复杂对象可渲染一次到纹理中,随后即可自由进行动画处理,而无需在每一帧都重新渲染该复杂对象。
- 不透明度图层。ShaderEffectSource 允许您将不透明度应用于一组对象,而非逐个对象单独处理。
| |
ShaderEffectSource类型不会将任何鼠标或键盘输入重定向至sourceItem 。若通过将visible 设为false或opacity 设为零来隐藏sourceItem ,它将不再响应输入。当ShaderEffectSource用于替代sourceItem 时,通常需要隐藏sourceItem 的同时仍处理输入。为此,可使用hideSource 属性。
您可以将ShaderEffectSource 与MultiEffect 结合使用:
- 在多个效果中使用同一个源项,并保持其不变。
- 通过使用ShaderEffectSource.sourceRect 来使用源项的一部分。
- 通过使用 `ShaderEffectSource.textureSize ` 属性,降低源项的分辨率,例如为了获得更好的性能。
注意:ShaderEffectSource 依赖于 FBO 多采样支持来对边缘进行抗锯齿处理。如果底层硬件不支持此功能(大多数嵌入式图形芯片均不支持),则在 ShaderEffectSource 内渲染的边缘将不会进行抗锯齿处理。 一种解决方法是将效果源的大小加倍,并使用 `smooth: true ` 进行渲染(这是 `smooth` 的默认值)。这相当于 4 倍多采样,但会以性能下降和内存占用增加为代价。
警告:在 大多数情况下,使用 ShaderEffectSource 会降低性能,并且在所有情况下都会增加视频内存的使用量。通过 ShaderEffectSource 进行渲染还可能导致质量下降,因为某些 OpenGL 实现支持多采样后缓冲区,但不支持多采样帧缓冲区对象。
属性文档
format : enumeration
此属性定义了底纹的格式。当该项用作ShaderEffect 的源纹理时,修改此属性最为合理。
| 常量 | 描述 |
|---|---|
ShaderEffectSource.RGBA8 | |
ShaderEffectSource.RGBA16F | |
ShaderEffectSource.RGBA32F | |
ShaderEffectSource.Alpha | 从 Qt 6.0 开始,此值已不再使用,实际上与RGBA8 具有相同的效果。 |
ShaderEffectSource.RGB | 从 Qt 6.0 开始,此值已不再使用,实际上与RGBA8 具有相同的效果。 |
ShaderEffectSource.RGBA | 从 Qt 6.0 开始,该值已不再使用,实际上与RGBA8 具有相同的效果。 |
hideSource : bool
如果此属性为 true,则sourceItem 将被隐藏,但仍会渲染到纹理中。与通过将visible 设置为 false 来隐藏sourceItem 不同,将此属性设置为 true 不会阻止鼠标或键盘输入到达sourceItem 。当ShaderEffectSource 锚定在sourceItem 上方并旨在替换 时,此属性非常有用。
live : bool
如果此属性为真,则每当sourceItem 更新时,纹理也会随之更新。否则,即使sourceItem 被赋予了新的项,纹理仍将保持为静止图像。该属性默认值为真。
mipmap : bool
如果此属性为真,则会为该纹理生成MIP映射。
注意:某些 OpenGL ES 2 实现不支持非 2 的幂纹理的 Mipmap 映射。
recursive : bool
如果“ShaderEffectSource ”依赖于自身,请将此属性设置为true。ShaderEffectSources 构成一个依赖链,其中一个“ShaderEffectSource ”可以作为另一个“sourceItem ”的一部分。如果该链中存在循环,则“ShaderEffectSource ”可能会尝试将其渲染结果写入其作为源使用的同一纹理中,而 OpenGL 不允许这种情况发生。 当此属性设置为 true 时,系统会额外分配一张纹理,以便ShaderEffectSource 能够保留上一帧纹理的副本。这样,它就可以渲染到一张纹理上,同时将上一帧的纹理用作源纹理。
同时将此属性与live 设置为true将导致场景图持续渲染。由于ShaderEffectSource 依赖于自身,对其进行更新意味着它会立即再次被标记为“脏”。
samples : int
此属性允许请求多采样渲染。
默认情况下,只要整个窗口启用了多采样渲染,且所使用的场景图渲染器和底层图形 API 支持此功能,则该属性也会启用多采样渲染。
通过将该属性值设置为 2、4 等,可以在不为整个场景启用多采样的情况下,仅对场景的一部分请求多采样渲染。这样,多采样仅应用于指定的子树,由于场景的其他部分未应用多采样,因此可以显著提高性能。
注意: 无论图层大小如何,启用 多采样都可能消耗大量资源,因为这会带来与硬件和驱动程序相关的性能和内存开销。
注意: 仅当系统支持多采样渲染缓冲区和帧缓冲区复制时,此 属性才有效。否则,该值将被静默忽略。
sourceItem : Item
该属性存储要渲染到纹理中的对象。当live 为true时,将该属性设置为null将释放纹理资源。
sourceRect : rect
该属性定义了sourceItem 中哪个矩形区域将被渲染到纹理中。源矩形可以比sourceItem 本身更大。如果矩形为空(这是默认值),则整个sourceItem 都会被渲染到纹理中。
textureMirroring : enumeration
此属性定义了生成的 OpenGL 纹理应如何进行镜像处理。默认值为ShaderEffectSource.MirrorVertically 。如果生成的纹理被自定义着色器直接访问(例如由ShaderEffect 指定的着色器),则自定义镜像处理会很有用。镜像处理对ShaderEffectSource 项本身在用户界面中的显示没有影响。
| 常量 | 描述 |
|---|---|
ShaderEffectSource.NoMirroring | 不进行镜像处理 |
ShaderEffectSource.MirrorHorizontally | 生成的纹理沿 X 轴翻转。 |
ShaderEffectSource.MirrorVertically | 生成的纹理沿 Y 轴翻转。 |
textureSize : size
该属性存储纹理的请求像素尺寸。如果为空(这是默认值),则使用源矩形的大小。
注意:该 值以像素为单位,因为它直接控制着纹理对象的大小。
注意:某些 平台对帧缓冲区对象的最小尺寸有限制,这意味着实际纹理尺寸可能会大于请求的尺寸。
wrapMode : enumeration
该属性定义了与纹理相关的 OpenGL 循环模式。当该项用作“ShaderEffect ”的源纹理时,修改此属性最为合理。
默认值为ShaderEffectSource.ClampToEdge 。
| 常量 | 描述 |
|---|---|
ShaderEffectSource.ClampToEdge | GL_CLAMP_TO_EDGE(水平和垂直方向均采用) |
ShaderEffectSource.RepeatHorizontally | 水平方向为 GL_REPEAT,垂直方向为 GL_CLAMP_TO_EDGE |
ShaderEffectSource.RepeatVertically | 水平方向为 GL_CLAMP_TO_EDGE,垂直方向为 GL_REPEATGL_CLAMP_TO_EDGE 水平方向,GL_REPEAT 垂直方向 |
ShaderEffectSource.Repeat | 水平和垂直方向均采用 GL_REPEAT 注意:某些 OpenGL ES 2 实现不支持对非 2 的幂大小的纹理使用 GL_REPEAT 循环模式。 |
方法文档
void scheduleUpdate()
安排在下一帧重新渲染纹理。当live 为false时,使用此方法更新纹理。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.
