本页内容

QuadTextureProvider QML Type

用于通过自定义片段着色器渲染四边形纹理。更多...

Import Statement: import QtQuick3D.Helpers
Since: Qt 6.12
Inherits:

TextureProviderExtension

属性

详细说明

此类型用于通过自定义着色器代码渲染四边形纹理,从而提供了一种便捷的方式来获取可编程纹理。通过提供片段着色器和所需属性,系统将创建一个渲染通道,并基于所提供的数据构建着色器管道,将这些属性作为uniform值传递给片段着色器。

提供的内置功能:

关键字类型描述
MAINvoid MAIN() 是入口点。在提供的片段着色器中,该函数必须始终存在。
INPUT_UVvec2当前片段的 UV 坐标。右上角为 [1, 1],左下角为 [0, 0]。
OUTPUT_SIZEvec2输出纹理的大小。

自定义属性会被映射到uniform变量上。每当值发生变化时,更新后的值将在着色器中显示出来。您可能已经通过ShaderEffect 了解过这一概念。

QML 属性名称与 GLSL 变量名称必须一致。着色器代码中无需为各个 uniform 进行单独声明,而是可以直接使用 QML 属性名称。

下表列出了类型映射关系:

QML 类型着色器类型备注
real、int、boolfloat、int、bool
colorvec4sRGB 到线性空间的转换是隐式进行的
vector2dvec2
vector3dvec3
vector4dvec4
4x4矩阵mat4
四元数vec4标量值为w
矩形vec4
点,大小vec2
TextureInputsampler2D

以下是一个输出简单红色纹理的示例:

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"
        }
    }
}

结果如下:

由青绿色、白色、蓝色和品红色渐变填充的2x2网格

注意: 不支持提供 顶点着色器,仅支持片段着色器。

注意:如果 提供了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 位浮点数。

注意:除了 TexureData.RGBA8外,并非 所有格式都在运行时受支持,因为这取决于所使用的后端以及所使用的硬件。

该属性在 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.