QuadTextureProvider QML Type
用于通过自定义片段着色器渲染四边形纹理。更多...
| Import Statement: | import QtQuick3D.Helpers |
| Since: | Qt 6.12 |
| Inherits: |
属性
- format : enumeration
(since 6.12) - fragmentShader : url
(since 6.12) - fragmentShaderCode : string
(since 6.12) - height : int
(since 6.12) - width : int
(since 6.12)
详细说明
此类型用于通过自定义着色器代码渲染四边形纹理,从而提供了一种便捷的方式来获取可编程纹理。通过提供片段着色器和所需属性,系统将创建一个渲染通道,并基于所提供的数据构建着色器管道,将这些属性作为uniform值传递给片段着色器。
提供的内置功能:
| 关键字 | 类型 | 描述 |
|---|---|---|
| MAIN | void MAIN() 是入口点。在提供的片段着色器中,该函数必须始终存在。 | |
| INPUT_UV | vec2 | 当前片段的 UV 坐标。右上角为 [1, 1],左下角为 [0, 0]。 |
| OUTPUT_SIZE | vec2 | 输出纹理的大小。 |
自定义属性会被映射到uniform变量上。每当值发生变化时,更新后的值将在着色器中显示出来。您可能已经通过ShaderEffect 了解过这一概念。
QML 属性名称与 GLSL 变量名称必须一致。着色器代码中无需为各个 uniform 进行单独声明,而是可以直接使用 QML 属性名称。
下表列出了类型映射关系:
| QML 类型 | 着色器类型 | 备注 |
|---|---|---|
| real、int、bool | float、int、bool | |
| color | vec4 | sRGB 到线性空间的转换是隐式进行的 |
| vector2d | vec2 | |
| vector3d | vec3 | |
| vector4d | vec4 | |
| 4x4矩阵 | mat4 | |
| 四元数 | vec4 | 标量值为w |
| 矩形 | vec4 | |
| 点,大小 | vec2 | |
| TextureInput | sampler2D |
以下是一个输出简单红色纹理的示例:
Texture {
textureProvider: QuadTextureProvider {
width: 128
height: 128
fragmentShaderCode: `
void MAIN() {
FRAGCOLOR = vec4(1.0, 0.0, 0.0, 1.0);
}
`
}
}另一个示例是从Texture 属性中采样,并将其与UV颜色混合:
Texture {
textureProvider: QuadTextureProvider {
fragmentShaderCode: `
void MAIN() {
vec2 uv = INPUT_UV;
vec4 c = texture(checkers, uv);
FRAGCOLOR = mix(c, vec4(uv, 1, 1), 0.5);
}`
property Texture checkers : Texture {
source: "../shared/maps/checkers2.png"
}
}
}结果如下:

注意: 不支持提供 顶点着色器,仅支持片段着色器。
注意:如果 提供了Texture 属性,则在相关纹理可用之前不会进行渲染。
注意: 目前不支持在运行时添加/删除属性,仅支持 修改原始属性。
另请参阅 ShaderEffect 。
属性文档
format : enumeration [default: TexureData.RGBA16F, since 6.12]
该属性指定输出纹理的格式。
| 常量 | 描述 |
|---|---|
TexureData.RGBA8 | 颜色格式被视为 R、G、B 和 alpha 通道中的 8 位整数。 |
TexureData.RGBA16F | 颜色格式在 R、G、B 和 alpha 通道中被视为 16 位浮点数。 |
TexureData.RGBA32F | 颜色格式在 R、G、B 和 alpha 通道中被视为 32 位浮点数。 |
TexureData.RGBE8 | 该颜色格式被视为 R、G 和 B 通道中的 8 位尾数以及 8 位共享指数。 |
TexureData.R8 | 该颜色格式在 R 通道中被视为 8 位整数。 |
TexureData.R16 | 该颜色格式在 R 通道中被视为 16 位整数。 |
TexureData.R16F | 该颜色格式在 R 通道中被视为 16 位浮点数。 |
TexureData.R32F | 该颜色格式被视为 R 通道为 32 位浮点数。 注意:除了 |
该属性在 Qt 6.12 中引入。
fragmentShader : url [since 6.12]
指定包含自定义片段着色器代码片段的文件。
该值是一个 URL,必须是本地文件,或者使用 qrc 方案访问通过 Qt 资源系统嵌入的文件。也接受相对文件路径(不带方案),在这种情况下,该文件将被视为相对于组件(即.qml 文件)的相对路径。
警告:着色器 代码片段被视为受信任的内容。建议应用程序开发人员在允许加载不属于应用程序本身的用户提供的内容之前,仔细考虑其潜在影响。
注意:若 已设置,fragmentShaderCode 将优先于 fragmentShader。
该属性自 Qt 6.12 起引入。
另请参阅 fragmentShaderCode 。
fragmentShaderCode : string [since 6.12]
指定一段自定义片段着色器代码。
用于将着色器代码以内联字符串的形式嵌入,而非提供文件。
注意:如果 设置了此属性,它将优先于fragmentShader 。
该属性在 Qt 6.12 中引入。
另请参阅 fragmentShader 。
height : int [default: 128, since 6.12]
指定输出纹理的高度(以像素为单位)。
该属性自 Qt 6.12 起引入。
另请参阅 width 。
width : int [default: 128, since 6.12]
指定输出纹理的宽度(以像素为单位)。
该属性于 Qt 6.12 版本中引入。
另请参阅 height 。
© 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.