QRhiShaderResourceBinding 类
描述单一绑定点的着色器资源。 更多...
头文件 | #include <QRhiShaderResourceBinding> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
qmake | QT += gui |
自 | Qt 6.6 |
公共类型
枚举 | StageFlag { VertexStage, TessellationControlStage, TessellationEvaluationStage, FragmentStage, ComputeStage, GeometryStage } |
标志 | StageFlags |
枚举 | 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 &b, 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> 的别名。它存储 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 | 存储缓冲区加载和存储 |
成员函数文档
[静态]
QRhiShaderResourceBinding QRhiShaderResourceBinding::bufferLoad(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf)
返回具有给定 binding 编号和管道 stage 的只读存储缓冲区的着色器资源绑定。
注意:当 buf 不为 null 时,必须使用 QRhiBuffer::StorageBuffer 创建。
注意:buf 可以是 null。创建未指定资源的 QRhiShaderResourceBindings 是有效的,但不能与 QRhiCommandBuffer::setShaderResources() 一起使用。但是,它适用于创建管道。然后必须始终与另一个布局兼容且具有资源的 QRhiShaderResourceBindings 一起使用,并将资源传递给 QRhiCommandBuffer::setShaderResources()。
注意:只有计算管线中才保证支持缓冲区加载/存储。虽然某些后端可能支持在图形管线中使用这些资源,但这并不普遍支持,而且在支持的情况下,当涉及到屏障和同步时可能会出现意外问题。因此,避免在计算器以外的着色器中使用这些资源。
[静态]
QRhiShaderResourceBinding QRhiShaderResourceBinding::bufferLoad(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf, quint32 offset, quint32 size)
返回具有给定 binding 编号和管道 stage 的只读存储缓冲区的着色器资源绑定。此重载仅绑定指定的区域,由 offset 和 size 确定。
注意:当 buf 不为 null 时,必须使用 QRhiBuffer::StorageBuffer 创建。
注意:buf 可以是 null。创建未指定资源的 QRhiShaderResourceBindings 是有效的,但不能与 QRhiCommandBuffer::setShaderResources() 一起使用。但是,它适用于创建管道。然后必须始终与另一个布局兼容且具有资源的 QRhiShaderResourceBindings 一起使用,并将资源传递给 QRhiCommandBuffer::setShaderResources()。
注意:只有计算管线中才保证支持缓冲区加载/存储。虽然某些后端可能支持在图形管线中使用这些资源,但这并不普遍支持,而且在支持的情况下,当涉及到屏障和同步时可能会出现意外问题。因此,避免在计算器以外的着色器中使用这些资源。
[静态]
QRhiShaderResourceBinding QRhiShaderResourceBinding::bufferLoadStore(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf)
返回具有给定 binding 编号和管道 stage 的读写存储缓冲区的着色器资源绑定。
注意:当 buf 不为 null 时,必须使用 QRhiBuffer::StorageBuffer 创建。
注意:buf 可以是 null。创建未指定资源的 QRhiShaderResourceBindings 是有效的,但不能与 QRhiCommandBuffer::setShaderResources() 一起使用。但是,它适用于创建管道。然后必须始终与另一个布局兼容且具有资源的 QRhiShaderResourceBindings 一起使用,并将资源传递给 QRhiCommandBuffer::setShaderResources()。
注意:只有计算管线中才保证支持缓冲区加载/存储。虽然某些后端可能支持在图形管线中使用这些资源,但这并不普遍支持,而且在支持的情况下,当涉及到屏障和同步时可能会出现意外问题。因此,避免在计算器以外的着色器中使用这些资源。
[静态]
QRhiShaderResourceBinding QRhiShaderResourceBinding::bufferLoadStore(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf, quint32 offset, quint32 size)
返回具有给定 binding 编号和管道 stage 的读写存储缓冲区的着色器资源绑定。此重载仅绑定指定的区域,由 offset 和 size 确定。
注意:当 buf 不为 null 时,必须使用 QRhiBuffer::StorageBuffer 创建。
注意:buf 可以是 null。创建未指定资源的 QRhiShaderResourceBindings 是有效的,但不能与 QRhiCommandBuffer::setShaderResources() 一起使用。但是,它适用于创建管道。然后必须始终与另一个布局兼容且具有资源的 QRhiShaderResourceBindings 一起使用,并将资源传递给 QRhiCommandBuffer::setShaderResources()。
注意:只有计算管线中才保证支持缓冲区加载/存储。虽然某些后端可能支持在图形管线中使用这些资源,但这并不普遍支持,而且在支持的情况下,当涉及到屏障和同步时可能会出现意外问题。因此,避免在计算器以外的着色器中使用这些资源。
[静态]
QRhiShaderResourceBinding QRhiShaderResourceBinding::bufferStore(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf)
返回一个具有给定binding编号和管线stage的写入只存储缓冲区的着色器资源绑定。
注意:当 buf 不为 null 时,必须使用 QRhiBuffer::StorageBuffer 创建。
注意:buf 可以是 null。创建未指定资源的 QRhiShaderResourceBindings 是有效的,但不能与 QRhiCommandBuffer::setShaderResources() 一起使用。但是,它适用于创建管道。然后必须始终与另一个布局兼容且具有资源的 QRhiShaderResourceBindings 一起使用,并将资源传递给 QRhiCommandBuffer::setShaderResources()。
注意:只有计算管线中才保证支持缓冲区加载/存储。虽然某些后端可能支持在图形管线中使用这些资源,但这并不普遍支持,而且在支持的情况下,当涉及到屏障和同步时可能会出现意外问题。因此,避免在计算器以外的着色器中使用这些资源。
[静态]
QRhiShaderResourceBinding QRhiShaderResourceBinding::bufferStore(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiBuffer *buf, quint32 offset, quint32 size)
返回一个具有给定binding编号和管线stage的写入只存储缓冲区的着色器资源绑定。此重载仅绑定一个区域,由offset和size指定。
注意:当 buf 不为 null 时,必须使用 QRhiBuffer::StorageBuffer 创建。
注意:buf 可以是 null。创建未指定资源的 QRhiShaderResourceBindings 是有效的,但不能与 QRhiCommandBuffer::setShaderResources() 一起使用。但是,它适用于创建管道。然后必须始终与另一个布局兼容且具有资源的 QRhiShaderResourceBindings 一起使用,并将资源传递给 QRhiCommandBuffer::setShaderResources()。
注意:只有计算管线中才保证支持缓冲区加载/存储。虽然某些后端可能支持在图形管线中使用这些资源,但这并不普遍支持,而且在支持的情况下,当涉及到屏障和同步时可能会出现意外问题。因此,避免在计算器以外的着色器中使用这些资源。
[静态]
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传递。
注意:图像加载/存储仅保证在计算管线中使用。虽然一些后端可能支持在图形管线中使用这些资源,但这并不普遍支持,并且即使支持,也可能会出现与屏障和同步有关的不期望的问题。因此,请避免在没有计算着色器的情况下使用此类资源。
[静态]
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传递。
注意:图像加载/存储仅保证在计算管线中使用。虽然一些后端可能支持在图形管线中使用这些资源,但这并不普遍支持,并且即使支持,也可能会出现与屏障和同步有关的不期望的问题。因此,请避免在没有计算着色器的情况下使用此类资源。
[静态]
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);
[静态]
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() 传递。
注意:着色器可能无法消耗超过 16 个纹理/采样器,这取决于底层图形 API。在渲染器设计中必须考虑到这个硬限制。这不适用于消耗单个绑定点(着色器寄存器)的纹理数组,它可以根据底层图形 API 包含 256-2048 个纹理。但在这种意义上,纹理数组与使用相同数量的单个纹理没有区别。
另请参阅:sampledTextures
[静态]
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];
声明了一个组合图像采样器的数组。应用应提供 QRhiShaderResourceBinding 以绑定点5,该绑定点是通过调用此函数并以 count 设为8以及数组每个元素的合法纹理和采样器来设置的。
警告: 必须指定数组中的所有元素。在上述示例中,唯一有效的、可移植的方法是以 count 为8调用此函数。此外,所有 QRhiTexture 和 QRhiSampler 实例都必须是合法的,意味着 nullptr 是不接受的值。这是因为某些底层API,如Vulkan,要求在资源描述符数组中的每个元素都要求有效的图像和采样器对象。建议应用程序在数组中的某些元素(由于在着色器中未被访问)不相关时,提供“哑”采样器和纹理。
注意: texSamplers 可以是 null。创建一个未指定资源 QRhiShaderResourceBindings 是有效的,但不能与 QRhiCommandBuffer::setShaderResources 一起使用。然而,它适用于创建管道。然后,必须始终使用与另一个布局兼容的 QRhiShaderResourceBindings,该绑定包含资源并传递给 QRhiCommandBuffer::setShaderResources。
另请参阅 sampledTexture。
[静态]
QRhiShaderResourceBinding QRhiShaderResourceBinding::sampler(int binding, QRhiShaderResourceBinding::StageFlags stage, QRhiSampler *sampler)
返回给定绑定号、管道阶段和通过 binding、stage、sampler 指定的采样器的着色器资源绑定。
注意: sampler 可以是 null。创建一个未指定资源的 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。
[静态]
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;
注意:着色器可能无法消耗超过 16 个纹理,这取决于底层图形 API。在设计渲染器时必须牢记此硬限制。但对于纹理数组(请参阅 sampledTextures),这种情况并不相同,它可以包含 256-2048 个纹理,具体取决于底层图形 API。但是,纹理数组在这一点上与使用相同数量的单个纹理相同。
[静态]
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传递。
[静态]
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 报告的限制,则可能会发生意外错误。
[静态]
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 报告的限制,则可能会出现意外的错误。
[静态]
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 可以是 null。创建未指定资源的 QRhiShaderResourceBindings 是有效的,但不能与 QRhiCommandBuffer::setShaderResources() 一起使用。但是,它适用于创建管道。然后必须始终与另一个布局兼容且具有资源的 QRhiShaderResourceBindings 一起使用,并将资源传递给 QRhiCommandBuffer::setShaderResources()。
注意:如果 size 超过了为 QRhi::MaxUniformBufferRange 报告的限制,则可能会出现意外的错误。
相关非成员函数
[noexcept]
size_t qHash(const QRhiShaderResourceBinding &b, size_t seed = 0)
使用 seed 对计算进行初始化来返回 b 的哈希值。
[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 的内容相等,包括资源(缓冲区、纹理)及其相关参数(偏移量、大小)。要仅比较布局(绑定点、管道阶段、资源类型),请使用 isLayoutCompatible()。
© 2024 The Qt Company Ltd. 本文档中包含的贡献的内容版权属于其各自的所有者。本文档的提供受 GNU Free Documentation License version 1.3 许可协议管辖,由自由软件基金会发布。Qt 以及对应标志为 The Qt Company Ltd. 在芬兰以及/或其他国家和地区的商标。所有其他商标均为各自所有者的财产。