QRhiShaderResourceBinding Class
描述了单个绑定点对应的着色器资源。更多内容...
| 头文件: | #include <rhi/qrhi.h> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS GuiPrivate) target_link_libraries(mytarget PRIVATE Qt6::GuiPrivate) |
| qmake: | QT += gui-private |
| 自: | Qt 6.6 |
公共类型
| enum | StageFlag { VertexStage, TessellationControlStage, TessellationEvaluationStage, FragmentStage, ComputeStage, GeometryStage } |
| flags | StageFlags |
| enum | Type { UniformBuffer, SampledTexture, Texture, Sampler, ImageLoad, …, BufferLoadStore } |
公共函数
| QRhiShaderResourceBinding() | |
| bool | isLayoutCompatible(const QRhiShaderResourceBinding &other) const |
静态公共成员
| QRhiShaderResourceBinding | bufferLoad(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf) |
| QRhiShaderResourceBinding | bufferLoad(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf, quint32 offset, quint32 size) |
| QRhiShaderResourceBinding | bufferLoadStore(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf) |
| QRhiShaderResourceBinding | bufferLoadStore(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf, quint32 offset, quint32 size) |
| QRhiShaderResourceBinding | bufferStore(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf) |
| QRhiShaderResourceBinding | bufferStore(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf, quint32 offset, quint32 size) |
| QRhiShaderResourceBinding | imageLoad(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiTexture *tex, int level) |
| QRhiShaderResourceBinding | imageLoadStore(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiTexture *tex, int level) |
| QRhiShaderResourceBinding | imageStore(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiTexture *tex, int level) |
| QRhiShaderResourceBinding | sampledTexture(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiTexture *tex, QRhiSampler *sampler) |
| QRhiShaderResourceBinding | sampledTextures(int binding, QRhiShaderResourceBinding::StageFlags stage, int count, const QRhiShaderResourceBinding::TextureAndSampler *texSamplers) |
| QRhiShaderResourceBinding | sampler(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiSampler *sampler) |
| QRhiShaderResourceBinding | texture(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiTexture *tex) |
| QRhiShaderResourceBinding | textures(int binding, QRhiShaderResourceBinding::StageFlags stage, int count, QRhiTexture **tex) |
| QRhiShaderResourceBinding | uniformBuffer(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf) |
| QRhiShaderResourceBinding | uniformBuffer(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf, quint32 offset, quint32 size) |
| QRhiShaderResourceBinding | uniformBufferWithDynamicOffset(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf, quint32 size) |
相关的非成员
| size_t | qHash(const QRhiShaderResourceBinding &key, size_t seed = 0) |
| bool | operator!=(const QRhiShaderResourceBinding &a, const QRhiShaderResourceBinding &b) |
| bool | operator==(const QRhiShaderResourceBinding &a, const QRhiShaderResourceBinding &b) |
详细说明
无法直接构造 QRhiShaderResourceBinding 对象。请使用静态函数(如uniformBuffer() 或sampledTexture())来获取实例。
注意:这是一个 兼容性保证有限的 RHI API,详情请参阅QRhi 。
成员类型文档
enum QRhiShaderResourceBinding::StageFlag
flags QRhiShaderResourceBinding::StageFlags
用于指示着色器资源在哪些阶段可见的标志值
| 常量 | 值 | 描述 |
|---|---|---|
QRhiShaderResourceBinding::VertexStage | 1 << 0 | 顶点阶段 |
QRhiShaderResourceBinding::TessellationControlStage | 1 << 1 | 曲面细分控制(外壳着色器)阶段 |
QRhiShaderResourceBinding::TessellationEvaluationStage | 1 << 2 | 曲面细分评估(域着色器)阶段 |
QRhiShaderResourceBinding::FragmentStage | 1 << 4 | 片段(像素着色器)阶段 |
QRhiShaderResourceBinding::ComputeStage | 1 << 5 | 计算阶段 |
QRhiShaderResourceBinding::GeometryStage | 1 << 3 | 几何阶段 |
StageFlags 类型是QFlags<StageFlag> 的 typedef 定义。它存储了 StageFlag 值的按“或”运算组合。
enum QRhiShaderResourceBinding::Type
指定绑定到绑定点上的着色器资源的类型
| 常量 | 值 | 描述 |
|---|---|---|
QRhiShaderResourceBinding::UniformBuffer | 0 | 统一缓冲区 |
QRhiShaderResourceBinding::SampledTexture | 1 | 组合图像采样器(纹理和采样器对)。 即使底层 3D API 相关的着色语言不支持此概念(例如 D3D 和 HLSL),该功能仍然受支持,因为着色器转换层会负责对绑定点或着色器寄存器进行适当的转换和重映射。 |
QRhiShaderResourceBinding::Texture | 2 | 纹理(单独) |
QRhiShaderResourceBinding::Sampler | 3 | 采样器(单独) |
QRhiShaderResourceBinding::ImageLoad | 4 | 图像加载(在 GLSL 中,这对应于对作为图像对象暴露给着色器的纹理的一个层(以及一个或所有层)执行imageLoad() 操作) |
QRhiShaderResourceBinding::ImageStore | 5 | 图像存储(在 GLSL 中,这对应于对作为图像对象暴露给着色器的纹理的单个级别(以及一个或所有层)执行imageStore() 或 imageAtomic*() 操作) |
QRhiShaderResourceBinding::ImageLoadStore | 6 | 图像加载和存储 |
QRhiShaderResourceBinding::BufferLoad | 7 | 存储缓冲区加载(在 GLSL 中,这对应于从着色器存储缓冲区读取数据) |
QRhiShaderResourceBinding::BufferStore | 8 | 存储缓冲区写入(在 GLSL 中,这对应于向着色器存储缓冲区写入数据) |
QRhiShaderResourceBinding::BufferLoadStore | 9 | 存储缓冲区读写 |
成员函数文档
[constexpr noexcept default] QRhiShaderResourceBinding::QRhiShaderResourceBinding()
默认——构造一个QRhiShaderResourceBinding 的实例。
[static] QRhiShaderResourceBinding QRhiShaderResourceBinding::bufferLoad(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf)
返回一个用于只读存储缓冲区的着色器资源绑定,该缓冲区具有给定的binding 编号和stage 管道。
注意:当 buf 不为空时 ,该存储缓冲区必须已通过QRhiBuffer::StorageBuffer 创建。
注意: buf 可以为空。创建一个未指定资源的QRhiShaderResourceBindings 是有效的,但此类对象不能与QRhiCommandBuffer::setShaderResources() 一起使用。不过,它适合用于创建管道。此类管道必须始终与另一个布局兼容且包含资源的QRhiShaderResourceBindings 配合使用,并将该 作为参数传递给QRhiCommandBuffer::setShaderResources()。
注意: 仅保证在计算管道内可使用缓冲区 加载/存储功能。虽然某些后端可能也支持在图形管道中使用这些资源,但这并非普遍支持;即使支持,在涉及屏障和同步时也可能出现意想不到的问题。因此,请避免在计算着色器以外的其他着色器中使用此类资源。
[static] QRhiShaderResourceBinding QRhiShaderResourceBinding::bufferLoad(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf, quint32 offset, quint32 size)
返回一个用于只读存储缓冲区的着色器资源绑定,该缓冲区具有给定的binding 编号和stage 管道。此重载仅绑定一个区域,具体由offset 和size 指定。
注意:当 buf 不为空时,必须已通过QRhiBuffer::StorageBuffer 创建。
注意: buf 可以为空。创建一个未指定资源的QRhiShaderResourceBindings 是有效的,但此类对象不能与QRhiCommandBuffer::setShaderResources()一起使用。不过,它适合用于创建管道。此类管道必须始终与另一个布局兼容且包含资源的QRhiShaderResourceBindings 配合使用,并将该 作为参数传递给QRhiCommandBuffer::setShaderResources()。
注意: 仅保证在计算管道内可使用缓冲区 加载/存储功能。虽然某些后端可能也支持在图形管道中使用这些资源,但这并非普遍支持;即使支持,在处理屏障和同步时也可能出现意想不到的问题。因此,请避免在计算着色器以外的其他着色器中使用此类资源。
[static] QRhiShaderResourceBinding QRhiShaderResourceBinding::bufferLoadStore(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf)
返回一个用于读写存储缓冲区的着色器资源绑定,该缓冲区具有给定的binding 编号和stage 管道。
注意:当 buf 不为空时 ,必须已通过QRhiBuffer::StorageBuffer 创建。
注意: buf 可以为空。创建一个未指定资源的QRhiShaderResourceBindings 是有效的,但此类对象不能与QRhiCommandBuffer::setShaderResources() 一起使用。不过,它适合用于创建管道。此类管道必须始终与另一个布局兼容的QRhiShaderResourceBindings 配合使用,该 包含实际存在的资源,并传递给QRhiCommandBuffer::setShaderResources()。
注意: 仅保证在计算管道内可使用缓冲区 加载/存储功能。虽然某些后端可能也支持在图形管道中使用这些资源,但这并非普遍支持;即使支持,在处理屏障和同步时也可能出现意想不到的问题。因此,请避免在计算着色器以外的其他着色器中使用此类资源。
[static] QRhiShaderResourceBinding QRhiShaderResourceBinding::bufferLoadStore(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf, quint32 offset, quint32 size)
返回一个用于读写存储缓冲区的着色器资源绑定,该缓冲区具有给定的binding 编号和stage 管道。此重载仅绑定一个区域,具体由offset 和size 指定。
注意:当 buf 不为空时,必须已通过QRhiBuffer::StorageBuffer 创建。
注意: buf 可以为空。创建一个未指定资源的QRhiShaderResourceBindings 是有效的,但此类对象不能与QRhiCommandBuffer::setShaderResources() 一起使用。不过,它适合用于创建管道。此类管道必须始终与另一个布局兼容且包含资源的QRhiShaderResourceBindings 配合使用,并将该 作为参数传递给QRhiCommandBuffer::setShaderResources()。
注意: 仅保证在计算管道内可使用缓冲区 加载/存储功能。虽然某些后端可能也支持在图形管道中使用这些资源,但这并非普遍支持;即使支持,在涉及屏障和同步时也可能出现意想不到的问题。因此,请避免在计算着色器以外的其他着色器中使用此类资源。
[static] QRhiShaderResourceBinding QRhiShaderResourceBinding::bufferStore(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf)
返回一个写入专用存储缓冲区的着色器资源绑定,该缓冲区具有给定的binding 编号和stage 管道。
注意:当 buf 不为空时 ,该存储缓冲区必须已通过QRhiBuffer::StorageBuffer 创建。
注意: buf 可以为空。创建一个未指定资源的QRhiShaderResourceBindings 是有效的,但此类对象不能与QRhiCommandBuffer::setShaderResources() 一起使用。不过,它适合用于创建管道。此类管道必须始终与另一个布局兼容且包含资源的QRhiShaderResourceBindings 配合使用,并将该 作为参数传递给QRhiCommandBuffer::setShaderResources()。
注意: 仅保证在计算管道内可使用缓冲区 加载/存储功能。虽然某些后端可能也支持在图形管道中使用这些资源,但这并非普遍支持;即使支持,在涉及屏障和同步时也可能出现意想不到的问题。因此,请避免在计算着色器以外的其他着色器中使用此类资源。
[static] QRhiShaderResourceBinding QRhiShaderResourceBinding::bufferStore(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf, quint32 offset, quint32 size)
返回一个仅写入存储缓冲区的着色器资源绑定,该缓冲区具有给定的binding 编号和stage 管道。此重载仅绑定一个区域,具体由offset 和size 指定。
注意:当 buf 不为空时,必须已通过QRhiBuffer::StorageBuffer 创建。
注意: buf 可以为空。创建一个未指定资源的QRhiShaderResourceBindings 是有效的,但此类对象不能与QRhiCommandBuffer::setShaderResources() 一起使用。不过,它适合用于创建管道。此类管道必须始终与另一个布局兼容且包含资源的QRhiShaderResourceBindings 配合使用,并将该 作为参数传递给QRhiCommandBuffer::setShaderResources()。
注意: 仅保证在计算管道内可使用缓冲区 加载/存储功能。虽然某些后端可能也支持在图形管道中使用这些资源,但这并非普遍支持;即使支持,在涉及屏障和同步时也可能出现意料之外的问题。因此,请避免在计算着色器以外的其他着色器中使用此类资源。
[static] QRhiShaderResourceBinding QRhiShaderResourceBinding::imageLoad(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiTexture *tex, int level)
返回一个只读存储图像的着色器资源绑定,该图像具有给定的binding 编号和stage 管道。图像加载操作将能够访问指定level 的所有图层。(因此,如果纹理是立方体贴图,着色器必须使用imageCube而非image2D)
注意:当 tex 不为空时,它必须通过QRhiTexture::UsedWithLoadStore 创建。
注意: tex 可以为 null。创建一个未指定资源的QRhiShaderResourceBindings 是有效的,但此类对象不能与QRhiCommandBuffer::setShaderResources() 一起使用。不过,它适合用于创建管道。此类管道必须始终与另一个布局兼容且包含资源的QRhiShaderResourceBindings 配合使用,并将该对象作为参数传递给QRhiCommandBuffer::setShaderResources()。
注意:图像 加载/存储功能仅在计算阶段和片段渲染阶段可用。
[static] QRhiShaderResourceBinding QRhiShaderResourceBinding::imageLoadStore(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiTexture *tex, int level)
返回一个着色器资源绑定,该绑定对应于具有给定binding 编号和管道stage 的读写存储图像。图像加载/存储操作将能够访问指定level 的所有层。(因此,如果纹理是立方贴图,着色器必须使用imageCube而非image2D)
注意:当 tex 不为空时,它必须已通过QRhiTexture::UsedWithLoadStore 创建。
注意: tex 可以为 null。创建一个未指定资源的QRhiShaderResourceBindings 是有效的,但此类对象不能与QRhiCommandBuffer::setShaderResources() 一起使用。不过,它适合用于创建管道。此类管道必须始终与另一个布局兼容且包含资源的QRhiShaderResourceBindings 配合使用,并将该对象传递给QRhiCommandBuffer::setShaderResources()。
注意:图像 加载/存储功能仅在计算阶段和片段渲染阶段可用。
[static] QRhiShaderResourceBinding QRhiShaderResourceBinding::imageStore(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiTexture *tex, int level)
返回一个仅写入存储图像的着色器资源绑定,该图像具有给定的binding 编号和管道stage 。图像存储操作将能够访问指定level 的所有图层。(因此,如果纹理是立方贴图,着色器必须使用imageCube而非image2D)
注意:当 tex 不为空时,它必须通过QRhiTexture::UsedWithLoadStore 创建。
注意: tex 可以为 null。创建一个未指定资源的QRhiShaderResourceBindings 是有效的,但此类对象不能与QRhiCommandBuffer::setShaderResources() 一起使用。不过,它适合用于创建管道。此类管道必须始终与另一个布局兼容且包含资源的QRhiShaderResourceBindings 配合使用,并将该对象传递给QRhiCommandBuffer::setShaderResources()。
注意:图像 加载/存储功能仅在计算阶段和片段渲染阶段可用。
bool QRhiShaderResourceBinding::isLayoutCompatible(const QRhiShaderResourceBinding &other) const
如果布局与other 兼容,则返回true 。该布局不包含实际资源(例如缓冲区或纹理)及相关参数(例如偏移量或大小)。
例如,下面的a 和b 虽然不相同,但在布局上却是兼容的:
auto a = QRhiShaderResourceBinding::uniformBuffer(0, QRhiShaderResourceBinding::VertexStage, buffer);
auto b = QRhiShaderResourceBinding::uniformBuffer(0, QRhiShaderResourceBinding::VertexStage, someOtherBuffer, 256);[static] QRhiShaderResourceBinding QRhiShaderResourceBinding::sampledTexture(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiTexture *tex, QRhiSampler *sampler)
返回一个着色器资源绑定,该绑定对应于给定的绑定编号、管道阶段、纹理以及由binding 、stage 、tex 、sampler 指定的采样器。
注意:此 函数等同于将count 设为 1 后调用sampledTextures()。
注意: tex 和sampler 可以为空。创建一个资源未指定的QRhiShaderResourceBindings 是有效的,但此类对象不能与QRhiCommandBuffer::setShaderResources()一起使用。不过,它适合用于创建着色器管道。此类管道必须始终与另一个布局兼容且包含有效资源的QRhiShaderResourceBindings 配合使用,并将该 作为参数传递给QRhiCommandBuffer::setShaderResources()。
注意: 根据底层图形 API 的不同,着色器 可能无法使用超过 16 个纹理/采样器。在渲染器设计中必须牢记这一硬性限制。 这不适用于仅占用单个绑定点(着色器寄存器)的纹理数组,此类数组可根据底层图形 API 包含 256 至 2048 个纹理。不过,纹理数组(参见sampledTextures()) 在此方面的行为与使用相同数量的独立纹理并无区别。
另请参阅 sampledTextures()。
[static] QRhiShaderResourceBinding QRhiShaderResourceBinding::sampledTextures(int binding, QRhiShaderResourceBinding::StageFlags stage, int count, const QRhiShaderResourceBinding::TextureAndSampler *texSamplers)
返回一个着色器资源绑定,该绑定对应给定的绑定编号、管道阶段,以及由binding 、stage 、count 和texSamplers 指定的纹理-采样器对数组。
注意: count 的值必须不小于 1,且不大于 16。
注意:当 count 为 1时 ,该函数等同于sampledTexture()。
当涉及组合图像采样器数组时,此函数才适用。例如,在 GLSL 中,layout(binding = 5) uniform sampler2D shadowMaps[8]; 声明了一个组合图像采样器数组。此时,应用程序应为绑定点 5 提供一个QRhiShaderResourceBinding ,具体实现方式是调用此函数,将count 设为 8,并为数组的每个元素提供有效的纹理和采样器。
警告: 数组的所有 元素都 必须指定。以上例而言,唯一有效且可移植的方法是调用此函数时将count 设为 8。此外,所有QRhiTexture 和QRhiSampler 实例都必须有效,这意味着 nullptr 不是被接受的值。 这是因为某些底层 API(例如 Vulkan)要求描述符数组中的每个元素都必须具有有效的图像和采样器对象。如果某些数组元素不相关(因为在着色器中未被访问),建议应用程序提供“虚拟”采样器和纹理。
注意: texSamplers 可以为null。创建一个资源未指定的QRhiShaderResourceBindings 是有效的,但此类对象不能与QRhiCommandBuffer::setShaderResources()一起使用。不过,它适合用于创建管道。此类管道必须始终与另一个布局兼容且包含有效资源的QRhiShaderResourceBindings 配合使用,并将后者作为参数传递给QRhiCommandBuffer::setShaderResources()。
另请参阅 sampledTexture()。
[static] QRhiShaderResourceBinding QRhiShaderResourceBinding::sampler(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiSampler *sampler)
返回一个着色器资源绑定,该绑定对应给定的绑定编号、管道阶段以及由binding 、stage 、sampler 指定的采样器。
注意: sampler 可以为空。创建一个未指定资源的QRhiShaderResourceBindings 是有效的,但此类对象不能与QRhiCommandBuffer::setShaderResources() 一起使用。不过,它适合用于创建管道。此类管道必须始终与另一个布局兼容且包含资源的QRhiShaderResourceBindings 配合使用,并将该资源传递给QRhiCommandBuffer::setShaderResources()。
不支持单独采样器的数组。
这将为一个独立的采样器对象创建绑定,而sampledTexture() 适用于组合图像采样器。在兼容 Vulkan 的 GLSL 代码中,独立采样器声明为sampler ,而非sampler2D :layout(binding = 2) uniform sampler samp;
当同时存在texture2D 和sampler 时,可以将其结合使用来采样纹理:fragColor = texture(sampler2D(tex, samp), texcoord); 。
注意: 根据底层图形 API 的不同,着色器 可能无法使用超过 16 个采样器。在渲染器设计中必须牢记这一硬性限制。
另请参阅 texture()。
[static] QRhiShaderResourceBinding QRhiShaderResourceBinding::texture(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiTexture *tex)
返回一个着色器资源绑定,该绑定对应给定的绑定编号、管道阶段以及由binding 、stage 、tex 指定的纹理。
注意:此 函数等同于将count 设为 1 后调用textures()。
注意: tex 可以为 null。创建一个资源未指定的QRhiShaderResourceBindings 是有效的,但此类对象不能与QRhiCommandBuffer::setShaderResources() 一起使用。不过,它适合用于创建管道。此类管道必须始终与另一个布局兼容且包含有效资源的QRhiShaderResourceBindings 配合使用,并将该 作为参数传递给QRhiCommandBuffer::setShaderResources()。
这会为一个独立的纹理(图像)对象创建绑定,而sampledTexture() 则适用于组合图像采样器。在兼容 Vulkan 的 GLSL 代码中,独立纹理应声明为texture2D ,而非sampler2D :layout(binding = 1) uniform texture2D tex;
注意: 根据底层图形 API 的不同,着色器 可能无法使用超过 16 个纹理。在渲染器设计中必须牢记这一硬性限制。 这不适用于纹理数组——纹理数组仅占用一个绑定点(着色器寄存器),并可根据底层图形 API 包含 256 至 2048 个纹理。不过,纹理数组(参见sampledTextures()) 在这方面与使用相同数量的独立纹理并无区别。
[static] QRhiShaderResourceBinding QRhiShaderResourceBinding::textures(int binding, QRhiShaderResourceBinding::StageFlags stage, int count, QRhiTexture **tex)
返回一个着色器资源绑定,该绑定对应给定的绑定编号、管道阶段,以及由binding 、stage 、count 和tex 指定的(独立)纹理数组。
注意: count 的值必须不小于 1,且不大于 16。
注意:当 count 为 1时 ,该函数等同于texture()。
警告: 必须指定数组中的所有 元素。
注意: tex 可以为 null。创建一个资源未指定的QRhiShaderResourceBindings 是有效的,但此类对象不能与QRhiCommandBuffer::setShaderResources() 一起使用。不过,它适合用于创建管道。此类管道必须始终与另一个布局兼容的、具有资源的QRhiShaderResourceBindings 配合使用,并将该 作为参数传递给QRhiCommandBuffer::setShaderResources()。
[static] QRhiShaderResourceBinding QRhiShaderResourceBinding::uniformBuffer(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf)
返回一个着色器资源绑定,其绑定编号、管道阶段以及由binding 、stage 和buf 指定的缓冲区。
注意:当 buf 不为空时,它必须通过QRhiBuffer::UniformBuffer 创建。
注意: buf 可以为 null。创建一个未指定资源的QRhiShaderResourceBindings 是有效的,但此类对象不能与QRhiCommandBuffer::setShaderResources() 一起使用。不过,它适合用于创建管道。此类管道必须始终与另一个布局兼容且包含资源的QRhiShaderResourceBindings 配合使用,并将该 作为参数传递给QRhiCommandBuffer::setShaderResources()。
注意:如果 buf 的大小超过QRhi::MaxUniformBufferRange 报告的限制,可能会发生意外错误。
[static] QRhiShaderResourceBinding QRhiShaderResourceBinding::uniformBuffer(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf, quint32 offset, quint32 size)
返回一个着色器资源绑定,该绑定对应给定的绑定编号、管道阶段以及由binding 、stage 和buf 指定的缓冲区。此重载仅绑定一个区域,该区域由offset 和size 指定。
注意: 用户需 确保偏移量与QRhi::ubufAlignment() 对齐。
注意: size 必须大于 0。
注意:当 buf 不为空时,它必须通过QRhiBuffer::UniformBuffer 创建。
注意: buf 可以为 null。创建一个未指定资源的QRhiShaderResourceBindings 是有效的,但此类对象不能与QRhiCommandBuffer::setShaderResources() 一起使用。不过,它适合用于创建管道。此类管道必须始终与另一个布局兼容且包含资源的QRhiShaderResourceBindings 配合使用,并将该资源传递给QRhiCommandBuffer::setShaderResources()。
注意:如果 size 超出了QRhi::MaxUniformBufferRange 报告的限制,可能会发生意外错误。
[static] QRhiShaderResourceBinding QRhiShaderResourceBinding::uniformBufferWithDynamicOffset(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf, quint32 size)
返回一个着色器资源绑定,该绑定对应给定的绑定编号、管道阶段以及由 `binding`、`stage` 和 `buf` 指定的缓冲区。统一缓冲区被视为具有动态偏移量。 动态偏移量可在QRhiCommandBuffer::setShaderResources()中指定,从而允许使用不同的偏移量值,而无需为该缓冲区创建新的绑定。绑定区域的大小由size 指定。与非动态偏移量类似,offset + size 不能超过buf 的大小。
注意:当 buf 不为空时 ,它必须通过QRhiBuffer::UniformBuffer 创建。
注意: buf 可以为空。创建一个未指定资源的QRhiShaderResourceBindings 是有效的,但此类对象不能与QRhiCommandBuffer::setShaderResources() 一起使用。不过,它适合用于创建管道。此类管道必须始终与另一个布局兼容且包含资源的QRhiShaderResourceBindings 配合使用,并将该 作为参数传递给QRhiCommandBuffer::setShaderResources()。
注意:如果 size 超出了QRhi::MaxUniformBufferRange 报告的限制,可能会发生意外错误。
相关的非成员
[noexcept] size_t qHash(const QRhiShaderResourceBinding &key, size_t seed = 0)
返回key 的哈希值,并使用seed 作为计算的种子。
[noexcept] bool operator!=(const QRhiShaderResourceBinding &a, const QRhiShaderResourceBinding &b)
如果两个QRhiShaderResourceBinding 对象a 和b 中的所有绑定均相等,则返回false ;否则返回true 。
[noexcept] bool operator==(const QRhiShaderResourceBinding &a, const QRhiShaderResourceBinding &b)
如果两个QRhiShaderResourceBinding 对象a 和b 的内容相等,则返回true 。这包括资源(缓冲区、纹理)以及相关参数(偏移量、大小)。若仅需比较布局(绑定点、管道阶段、资源类型),请改用isLayoutCompatible()。
© 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.