QRhiShaderResourceBinding Class
描述单个绑定点的着色器资源。更多
头文件: | #include <rhi/qrhi.h> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Gui) 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 } |
公共函数
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 。
成员类型文档
枚举 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> 的类型定义。它存储 StageFlag 值的 OR 组合。
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 | 存储缓冲区加载和存储 |
成员函数文档
[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 可以为空。使用未指定的资源创建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 可以为空。使用未指定的资源创建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 可以为空。使用未指定的资源创建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 指定的指定绑定编号、流水线级数、纹理和采样器的着色器资源绑定。
注: 此函数等同于调用sampledTextures() ,count
为 1。
注: tex 和sampler 可以为空。使用未指定的资源创建QRhiShaderResourceBindings 是有效的,但这样的对象不能与QRhiCommandBuffer::setShaderResources() 一起使用。不过,它适用于创建管道。这样的流水线必须与另一个与布局兼容的QRhiShaderResourceBindings 同时使用,并将资源传给QRhiCommandBuffer::setShaderResources() 。
注意: 根据底层图形 API 的不同,着色器可能无法使用超过 16 个纹理/取样器。在设计渲染器时必须牢记这一硬性限制。这不适用于纹理数组,纹理数组消耗一个绑定点(着色器寄存器),可包含 256-2048 个纹理,具体取决于底层图形 API。不过,纹理阵列(参见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() 。
当涉及组合图像采样器数组时,此函数就显得尤为重要。例如,在 GLSLlayout(binding = 5) uniform sampler2D shadowMaps[8];
中声明了一个组合图像采样器数组。应用程序应为绑定点 5 提供一个QRhiShaderResourceBinding ,通过调用此函数将count 设置为 8,并为数组中的每个元素提供有效的纹理和采样器。
警告: 必须指定数组的所有元素。在上述示例中,唯一有效、可移植的方法是调用count 为 8 的函数。此外,所有QRhiTexture 和QRhiSampler 实例都必须有效,这意味着 nullptr 不是可接受的值。这是因为某些底层应用程序接口(如 Vulkan)要求描述符数组中的每个元素都必须是有效的图像和采样器对象。如果某些数组元素不相关(因为无法在着色器中访问),建议应用程序提供 "虚拟 "采样器和纹理。
注意: texSamplers 可以为空。使用未指定的资源创建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 指定的指定绑定编号、流水线阶段和纹理的着色器资源绑定。
注: 此函数等同于调用textures() ,count
为 1。
注: tex 可以为空。使用未指定的资源创建QRhiShaderResourceBindings 是有效的,但这样的对象不能与QRhiCommandBuffer::setShaderResources() 一起使用。不过,它适用于创建管道。这样的流水线必须与另一个与布局兼容的QRhiShaderResourceBindings 同时使用,并将资源传给QRhiCommandBuffer::setShaderResources() 。
这将创建一个单独纹理(图像)对象的绑定,而sampledTexture() 则适用于组合图像采样器。在兼容 Vulkan 的 GLSL 代码中,独立纹理声明为texture2D
,而不是sampler2D
:layout(binding = 1) uniform texture2D tex;
注: 根据底层图形 API 的不同,着色器可能无法使用超过 16 个纹理。在设计渲染器时必须牢记这一硬性限制。这不适用于纹理数组,纹理数组消耗一个绑定点(着色器寄存器),可包含 256-2048 个纹理,具体取决于底层图形 API。不过,纹理阵列(参见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 可以为空。使用未指定的资源创建QRhiShaderResourceBindings 是有效的,但这样的对象不能与QRhiCommandBuffer::setShaderResources() 一起使用。但它适用于创建管道。这样的管道必须与另一个与布局兼容的QRhiShaderResourceBindings 同时使用,并将资源传给QRhiCommandBuffer::setShaderResources() 。
[static]
QRhiShaderResourceBinding QRhiShaderResourceBinding::uniformBuffer(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf)
为给定的绑定编号、流水线级数和缓冲区返回着色器资源绑定(由binding 、stage 和buf 指定)。
注: 当buf 不为空时,它必须是用QRhiBuffer::UniformBuffer 创建的。
注: buf 可以为空。使用未指定的资源创建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 可以为空。使用未指定的资源创建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() 代替。
© 2025 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.