QRhiVertexInputAttribute 类

描述单个顶点输入元素。 更多信息...

头文件 #include <QRhiVertexInputAttribute>
CMakefind_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmakeQT += 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)
intbinding() const
QRhiVertexInputAttribute::Formatformat() const
intlocation() const
intmatrixSlice() const
quint32offset() const
voidsetBinding(int b)
voidsetFormat(QRhiVertexInputAttribute::Format f)
voidsetLocation(int loc)
voidsetMatrixSlice(int slice)
voidsetOffset(quint32 ofs)
size_tqHash(const QRhiVertexInputAttribute &v, size_t seed = 0)
booloperator!=(const QRhiVertexInputAttribute &a, const QRhiVertexInputAttribute &b)
booloperator==(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::Float40四分量浮点向量
QRhiVertexInputAttribute::Float31三分量浮点向量
QRhiVertexInputAttribute::Float22两分量浮点向量
QRhiVertexInputAttribute::Float3浮点
QRhiVertexInputAttribute::UNormByte44四分量归一化无符号字节数量
QRhiVertexInputAttribute::UNormByte25两分量归一化无符号字节数量
QRhiVertexInputAttribute::UNormByte6归一化无符号字节
QRhiVertexInputAttribute::UInt47四分量无符号整数向量
QRhiVertexInputAttribute::UInt38三分量无符号整数向量
QRhiVertexInputAttribute::UInt29两分量无符号整数向量
QRhiVertexInputAttribute::UInt10无符号整数
QRhiVertexInputAttribute::SInt411四分量有符号整数向量
QRhiVertexInputAttribute::SInt312三分量有符号整数向量
QRhiVertexInputAttribute::SInt213两分量有符号整数向量
QRhiVertexInputAttribute::SInt14有符号整数
QRhiVertexInputAttribute::Half415四分量半精度(16位)浮点向量
QRhiVertexInputAttribute::Half316三分量半精度(16位)浮点向量
QRhiVertexInputAttribute::Half217两分量半精度(16位)浮点向量
QRhiVertexInputAttribute::Half18半精度(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号、locationformatoffset构建顶点输入属性描述。

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对象ab中的值相等,则返回false;否则返回true

[noexcept] bool operator==(const QRhiVertexInputAttribute &a, const QRhiVertexInputAttribute &b)

如果两个QRhiVertexInputAttribute对象ab中的值相等,则返回true

© 2024 The Qt Company Ltd. 本文档中的贡献内容归其各自的拥有者版权所有。本提供的文档根据自由软件基金会发布的GNU自由文档许可第1.3版的条款进行许可。Qt及其logo是The Qt Company Ltd.在芬兰和/或其他国家的商标。所有其他商标归其各自所有者所有。