QRhiVertexInputAttribute 类
描述单个顶点输入元素。 更多信息...
头文件 | #include <QRhiVertexInputAttribute> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
qmake | QT += gui |
自 | Qt 6.6 |
公共类型
枚举 | Format { Float4, Float3, Float2, Float, UNormByte4, …, Half } |
公共函数
QRhiVertexInputAttribute() | |
QRhiVertexInputAttribute(int binding, int location, QRhiVertexInputAttribute::Format format, quint32 offset, int matrixSlice = -1) | |
int | binding() const |
QRhiVertexInputAttribute::Format | format() const |
int | location() const |
int | matrixSlice() const |
quint32 | offset() const |
void | setBinding(int b) |
void | setFormat(QRhiVertexInputAttribute::Format f) |
void | setLocation(int loc) |
void | setMatrixSlice(int slice) |
void | setOffset(quint32 ofs) |
相关非成员
size_t | qHash(const QRhiVertexInputAttribute &v, size_t seed = 0) |
bool | operator!=(const QRhiVertexInputAttribute &a, const QRhiVertexInputAttribute &b) |
bool | operator==(const QRhiVertexInputAttribute &a, const QRhiVertexInputAttribute &b) |
详细描述
成员指定单个顶点输入元素的绑定编号、位置、格式和偏移量。
注意:对于 HLSL,假设从 SPIR-V 转换过来的顶点着色器使用 TEXCOORD<location>
作为每个输入的语义。因此,没有单独的语义名称和索引。
例如,假设我们有一个顶点着色器,具有以下输入
layout(location = 0) in vec4 position; layout(location = 1) in vec2 texcoord;
现在假设我们有3个分量的顶点位置 (x, y, z)
和2个分量的纹理坐标 (u, v)
以非交错格式存储在一个缓冲区(或独立的缓冲区)中。一旦定义了两个绑定,可以指定属性为
QRhiVertexInputLayout inputLayout; inputLayout.setBindings({ { 3 * sizeof(float) }, { 2 * sizeof(float) } }); inputLayout.setAttributes({ { 0, 0, QRhiVertexInputAttribute::Float3, 0 }, { 1, 1, QRhiVertexInputAttribute::Float2, 0 } });
一旦绑定具有此顶点输入布局的图形管线,顶点输入可以按如下方式设置,以绘制具有36个顶点的立方体,假设我们有一个缓冲区,其中首先包含位置然后是纹理坐标
const QRhiCommandBuffer::VertexInput vbufBindings[] = { { cubeBuf, 0 }, { cubeBuf, 36 * 3 * sizeof(float) } }; cb->setVertexInput(0, 2, vbufBindings);
当处理交错数据时,通常只有一个绑定,多个属性都引用该相同缓冲区绑定点
QRhiVertexInputLayout inputLayout; inputLayout.setBindings({ { 5 * sizeof(float) } }); inputLayout.setAttributes({ { 0, 0, QRhiVertexInputAttribute::Float3, 0 }, { 0, 1, QRhiVertexInputAttribute::Float2, 3 * sizeof(float) } });
然后
const QRhiCommandBuffer::VertexInput vbufBinding(interleavedCubeBuf, 0); cb->setVertexInput(0, 1, &vbufBinding);
注意:这是一个RHI API,兼容性保证有限,有关详细信息,请参阅QRhi。
另请参阅QRhiCommandBuffer::setVertexInput().
成员类型文档
枚举 QRhiVertexInputAttribute::Format
指定元素数据的类型。
常量 | 值 | 描述 |
---|---|---|
QRhiVertexInputAttribute::Float4 | 0 | 四分量浮点向量 |
QRhiVertexInputAttribute::Float3 | 1 | 三分量浮点向量 |
QRhiVertexInputAttribute::Float2 | 2 | 两分量浮点向量 |
QRhiVertexInputAttribute::Float | 3 | 浮点 |
QRhiVertexInputAttribute::UNormByte4 | 4 | 四分量归一化无符号字节数量 |
QRhiVertexInputAttribute::UNormByte2 | 5 | 两分量归一化无符号字节数量 |
QRhiVertexInputAttribute::UNormByte | 6 | 归一化无符号字节 |
QRhiVertexInputAttribute::UInt4 | 7 | 四分量无符号整数向量 |
QRhiVertexInputAttribute::UInt3 | 8 | 三分量无符号整数向量 |
QRhiVertexInputAttribute::UInt2 | 9 | 两分量无符号整数向量 |
QRhiVertexInputAttribute::UInt | 10 | 无符号整数 |
QRhiVertexInputAttribute::SInt4 | 11 | 四分量有符号整数向量 |
QRhiVertexInputAttribute::SInt3 | 12 | 三分量有符号整数向量 |
QRhiVertexInputAttribute::SInt2 | 13 | 两分量有符号整数向量 |
QRhiVertexInputAttribute::SInt | 14 | 有符号整数 |
QRhiVertexInputAttribute::Half4 | 15 | 四分量半精度(16位)浮点向量 |
QRhiVertexInputAttribute::Half3 | 16 | 三分量半精度(16位)浮点向量 |
QRhiVertexInputAttribute::Half2 | 17 | 两分量半精度(16位)浮点向量 |
QRhiVertexInputAttribute::Half | 18 | 半精度(16位)浮点 |
注意:半精度浮点属性的支持在运行时由QRhi::Feature::HalfAttributes功能标志指示。请注意,Direct3D 11/12支持半精度输入属性,但并不支持Half3类型。D3D后端将Half3作为Half4传递。为确保跨平台兼容性,Half3输入应填充为8字节。
成员函数文档
[constexpr noexcept]
QRhiVertexInputAttribute::QRhiVertexInputAttribute()
构建默认顶点输入属性描述。
QRhiVertexInputAttribute::QRhiVertexInputAttribute(int binding, int location, QRhiVertexInputAttribute::Format format, quint32 offset, int matrixSlice = -1)
用指定的binding号、location、format和offset构建顶点输入属性描述。
matrixSlice应为-1,除非此属性对应矩阵的行或列(例如,4x4矩阵变为4个vec4,消耗4个连续的顶点输入位置),在这种情况下,它是行或列的索引。必须始终使location - matrixSlice
等于未展开矩阵的第一行或列的location
。
int QRhiVertexInputAttribute::binding() const
返回绑定点索引。
另请参阅 setBinding。
QRhiVertexInputAttribute::Format QRhiVertexInputAttribute::format() const
返回顶点输入元素的格式。
另请参阅 setFormat。
int QRhiVertexInputAttribute::location() const
返回顶点输入元素的定位位置。
另请参阅 setLocation。
int QRhiVertexInputAttribute::matrixSlice() const
返回如果输入元素对应于矩阵的行或列,则为矩阵切片,如果不相关则为 -1。
另请参阅 setMatrixSlice。
quint32 QRhiVertexInputAttribute::offset() const
返回输入元素的字节偏移。
另请参阅 setOffset。
void QRhiVertexInputAttribute::setBinding(int b)
将绑定点索引设置为 b。默认情况下,设置为 0。
另请参阅 binding。
void QRhiVertexInputAttribute::setFormat(QRhiVertexInputAttribute::Format f)
将顶点输入元素的格式设置为 f。默认情况下,设置为 Float4。
另请参阅 format。
void QRhiVertexInputAttribute::setLocation(int loc)
将顶点输入元素的定位设置为 loc。默认情况下,设置为 0。
另请参阅 location。
void QRhiVertexInputAttribute::setMatrixSlice(int slice)
设置矩阵 slice。默认情况下,设置为 -1,仅在属性对应于矩阵的行或列时(例如,4x4 矩阵变为 4 个 vec4,占用 4 个连续的顶点输入位置),此时它是行或列的索引。 location - matrixSlice
必须始终等于未展开矩阵的第一行或第一列的 location
。
另请参阅 matrixSlice。
void QRhiVertexInputAttribute::setOffset(quint32 ofs)
将输入元素的字节偏移设置为 ofs。
另请参阅 offset。
相关非成员
[noexcept]
size_t qHash(const QRhiVertexInputAttribute &, size_t seed = 0)
返回v的哈希值,使用seed来初始化计算。
[noexcept]
bool operator!=(const QRhiVertexInputAttribute &a, const QRhiVertexInputAttribute &b)
如果两个QRhiVertexInputAttribute对象a和b中的值相等,则返回false
;否则返回true
。
[noexcept]
bool operator==(const QRhiVertexInputAttribute &a, const QRhiVertexInputAttribute &b)
如果两个QRhiVertexInputAttribute对象a和b中的值相等,则返回true
。
© 2024 The Qt Company Ltd. 本文档中的贡献内容归其各自的拥有者版权所有。本提供的文档根据自由软件基金会发布的GNU自由文档许可第1.3版的条款进行许可。Qt及其logo是The Qt Company Ltd.在芬兰和/或其他国家的商标。所有其他商标归其各自所有者所有。