QSGGeometry 类
QSGGeometry 类提供对 Qt Quick 场景图图形原语的低级别存储。 更多...
头文件 | #include <QSGGeometry> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Quick) target_link_libraries(mytarget PRIVATE Qt6::Quick) |
qmake | QT += quick |
公共类型
struct | Attribute |
struct | AttributeSet |
struct | ColoredPoint2D |
struct | Point2D |
struct | TexturedPoint2D |
enum | AttributeType { UnknownAttribute, PositionAttribute, ColorAttribute, TexCoordAttribute, TexCoord1Attribute, TexCoord2Attribute } |
enum | DataPattern { AlwaysUploadPattern, DynamicPattern, StaticPattern, StreamPattern } |
enum | DrawingMode { DrawPoints, DrawLines, DrawLineStrip, DrawTriangles, DrawTriangleStrip } |
enum | Type { ByteType, UnsignedByteType, ShortType, UnsignedShortType, IntType, …, DoubleType } |
公共函数
QSGGeometry(const QSGGeometry::AttributeSet &attributes, int vertexCount, int indexCount = 0, int indexType = UnsignedShortType) | |
virtual | ~QSGGeometry() |
void | allocate(int vertexCount, int indexCount = 0) |
int | attributeCount() const |
const QSGGeometry::Attribute * | attributes() const |
unsigned int | drawingMode() const |
int | indexCount() const |
void * | indexData() |
const void * | indexData() const |
uint * | indexDataAsUInt() |
const uint * | indexDataAsUInt() const |
quint16 * | indexDataAsUShort() |
const quint16 * | indexDataAsUShort() const |
QSGGeometry::DataPattern | indexDataPattern() const |
int | indexType() const |
float | lineWidth() const |
void | markIndexDataDirty() |
void | markVertexDataDirty() |
void | setDrawingMode(unsigned int mode) |
void | setIndexDataPattern(QSGGeometry::DataPattern p) |
void | setLineWidth(float width) |
void | setVertexDataPattern(QSGGeometry::DataPattern p) |
int | sizeOfIndex() const |
int | sizeOfVertex() const |
int | vertexCount() const |
void * | vertexData() |
const void * | vertexData() const |
QSGGeometry::ColoredPoint2D * | vertexDataAsColoredPoint2D() |
const QSGGeometry::ColoredPoint2D * | vertexDataAsColoredPoint2D() const |
QSGGeometry::Point2D * | vertexDataAsPoint2D() |
const QSGGeometry::Point2D * | vertexDataAsPoint2D() const |
QSGGeometry::TexturedPoint2D * | vertexDataAsTexturedPoint2D() |
const QSGGeometry::TexturedPoint2D * | vertexDataAsTexturedPoint2D() const |
QSGGeometry::DataPattern | vertexDataPattern() const |
静态公共成员
const QSGGeometry::AttributeSet & | defaultAttributes_ColoredPoint2D() |
const QSGGeometry::AttributeSet & | defaultAttributes_Point2D() |
const QSGGeometry::AttributeSet & | defaultAttributes_TexturedPoint2D() |
void | updateColoredRectGeometry(QSGGeometry *g, const QRectF &rect) |
void | updateRectGeometry(QSGGeometry *g, const QRectF &rect) |
void | updateTexturedRectGeometry(QSGGeometry *g, const QRectF &rect, const QRectF &textureRect) |
详细描述
QSGGeometry类存储了使用场景图渲染的原始几何形状。它包含顶点数据,可选的索引数据。绘制几何形状所使用的模式,也称为原语拓扑,由setDrawingMode()指定。
顶点可以是简单的由x和y值定义的点,也可以是更复杂的点,每个顶点包含法线、纹理坐标和3D位置。《a href="qsggeometry-attributeset.html" translate="no">QSGGeometry::AttributeSet》用于描述顶点数据如何构建。只能在使用构造函数时指定属性集。QSGGeometry类提供了一些便利属性和属性集,默认情况下提供。默认属性集defaultAttributes_Point2D()函数返回一个属性集,用于在普通实色矩形中使用,而defaultAttributes_TexturedPoint2D函数返回用于纹理2D几何形状的属性。顶点数据作为内部的void *
存储,可以通过vertexData()函数访问。带有vertexDataAsPoint2D()和vertexDataAsTexturedPoint2D()的便利访问器可访问常用属性集。顶点数据通过将顶点数传递给构造函数或在稍后调用allocate()时进行分配。
QSGGeometry可以可选地包含16位、32位或8位无符号整数的索引。索引类型必须在与构造函数中指定,并且不能更改。
以下是一个示例代码片段,说明了如何构建由位置和颜色顶点组成的几何形状。
struct MyPoint2D { float x; float y; float r; float g; float b; float a; void set(float x_, float y_, float r_, float g_, float b_, float a_) { x = x_; y = y_; r = r_; g = g_; b = b_; a = a_; } }; QSGGeometry::Attribute MyPoint2D_Attributes[] = { QSGGeometry::Attribute::create(0, 2, FloatType, true), QSGGeometry::Attribute::create(1, 4, FloatType, false) }; QSGGeometry::AttributeSet MyPoint2D_AttributeSet = { 2, sizeof(MyPoint2D), MyPoint2D_Attributes }; ... geometry = new QSGGeometry(MyPoint2D_AttributeSet, 2); geometry->setDrawingMode(DrawLines); MyPoint2D *vertices = static_cast<MyPoint2D *>(geometry->vertexData()); vertices[0].set(0, 0, 1, 0, 0, 1); vertices[1].set(width(), height(), 0, 0, 1, 1);
QSGGeometry是一个软件缓冲区,就加速渲染而言是客户端的,因为在2D图形中使用的缓冲区通常由许多每帧都会更改的小缓冲区组成,并且没有从上传到图形内存中受益。但是,QSGGeometry支持使用setVertexDataPattern()和setIndexDataPattern()函数向渲染器提示应上传缓冲区。是否尊重此提示取决于实现。
注意:应仅在任何带有QSG前缀的类上使用场景图的渲染线程。有关更多信息,请参阅场景图和渲染。
也请参阅QSGGeometryNode 和 场景图 - 自定义几何形状.
成员类型文档
enum QSGGeometry::AttributeType
此枚举用于识别几种属性类型。
常量 | 值 | 描述 |
---|---|---|
QSGGeometry::UnknownAttribute | 0 | 不关心 |
QSGGeometry::PositionAttribute | 1 | 位置 |
QSGGeometry::ColorAttribute | 2 | 颜色 |
QSGGeometry::TexCoordAttribute | 3 | 纹理坐标 |
QSGGeometry::TexCoord1Attribute | 4 | 纹理坐标1 |
QSGGeometry::TexCoord2Attribute | 5 | 纹理坐标2 |
enum QSGGeometry::DataPattern
DataPattern枚举用于指定几何对象中顶点和索引数据的用法。
常量 | 值 | 描述 |
---|---|---|
QSGGeometry::AlwaysUploadPattern | 0 | 数据始终上传。这意味着用户在更改后无需明确将索引和顶点数据标记为“脏”。这是默认设置。 |
QSGGeometry::DynamicPattern | 2 | 数据被多次修改,并多次绘制。这是一个可能提供更好性能的提示。当设置时应确保在更改后标记数据为“脏”。 |
QSGGeometry::StaticPattern | 3 | 数据只被修改一次,并多次绘制。这是一个可能提高性能的提示。当设置时,用户应确保更改后标记数据为“脏”。 |
QSGGeometry::StreamPattern | 1 | 几乎每次绘制都会修改数据。这是一个可能提高性能的提示。设置后,用户必须确保更改后标记数据为“脏”。 |
enum QSGGeometry::DrawingMode
指定绘制模式,也称为原语拓扑。
注意:从Qt 6开始,场景图仅公开跨所有支持3D图形API的功能拓扑。因此,虽然枚举值本身仍然存在,但在Qt 6的运行时不再支持DrawLineLoop
和DrawTriangleFan
的值。
常量 | 值 |
---|---|
QSGGeometry::DrawPoints | 0x0000 |
QSGGeometry::DrawLines | 0x0001 |
QSGGeometry::DrawLineStrip | 0x0003 |
QSGGeometry::DrawTriangles | 0x0004 |
QSGGeometry::DrawTriangleStrip | 0x0005 |
enum QSGGeometry::Type
指定顶点数据中的组件类型。
常量 | 值 | 描述 |
---|---|---|
QSGGeometry::ByteType | 0x1400 | |
QSGGeometry::UnsignedByteType | 0x1401 | |
QSGGeometry::ShortType | 0x1402 | |
QSGGeometry::UnsignedShortType | 0x1403 | |
QSGGeometry::IntType | 0x1404 | |
QSGGeometry::UnsignedIntType | 0x1405 | |
QSGGeometry::FloatType | 0x1406 | |
QSGGeometry::Bytes2Type | 0x1407 | 自Qt 5.14开始添加。 |
QSGGeometry::Bytes3Type | 0x1408 | 自Qt 5.14开始添加。 |
QSGGeometry::Bytes4Type | 0x1409 | 自Qt 5.14开始添加。 |
QSGGeometry::DoubleType | 0x140A | 自Qt 5.14开始添加。 |
成员函数文档
QSGGeometry::QSGGeometry(const QSGGeometry::AttributeSet &attributes, int vertexCount, int indexCount = 0, int indexType = UnsignedShortType)
根据attributes构建几何对象。
根据attributes累积的大小,分配空间以存储vertexCount个顶点,以及存储indexCount。
indexType可以是UnsignedShortType或UnsignedIntType
。对后者的支持取决于运行时使用的图形API实现,并且不一定始终可用。
默认情况下,几何对象使用DrawTriangleStrip作为绘制模式。
注意: attributes及其引用的Attribute对象必须在QSGGeometry的整个生命周期内保持有效。QSGGeometry存储对attributes的引用,并不删除Attribute对象。
[虚拟"Noexcept"]
QSGGeometry::~QSGGeometry()
销毁几何对象及其分配的顶点和索引数据。
void QSGGeometry::allocate(int vertexCount, int indexCount = 0)
将此几何对象的顶点和索引数据大小调整为适合vertexCount个顶点和indexCount个索引。
此调用后,顶点和索引数据将失效,调用者必须通过调用node->markDirty(QSGNode::DirtyGeometry)来标注相关的几何节点为脏,以确保渲染器有机会更新内部缓冲区。
int QSGGeometry::attributeCount() const
返回此几何用到的属性集中属性的数量。
const QSGGeometry::Attribute *QSGGeometry::attributes() const
返回包含此几何属性的一个数组。数组的大小由attributeCount()给出。
[静态]
const QSGGeometry::AttributeSet &QSGGeometry::defaultAttributes_ColoredPoint2D()
返回用于逐顶点着色2D绘制的属性。
[静态]
const QSGGeometry::AttributeSet &QSGGeometry::defaultAttributes_Point2D()
返回用于2D实心色绘制的属性。
[静态]
const QSGGeometry::AttributeSet &QSGGeometry::defaultAttributes_TexturedPoint2D()
返回用于纹理化2D绘制的属性。
unsigned int QSGGeometry::drawingMode() const
返回此几何的绘制模式。
默认值为DrawTriangleStrip。
另请参阅 setDrawingMode。
int QSGGeometry::indexCount() const
返回此几何对象中的索引数量。
void *QSGGeometry::indexData()
返回指向此几何对象原始索引数据的指针。
另请参阅 indexDataAsUShort()和indexDataAsUInt。
const void *QSGGeometry::indexData() const
返回指向此几何对象原始索引数据的指针。
另请参阅 indexDataAsUShort()和indexDataAsUInt。
uint *QSGGeometry::indexDataAsUInt()
访问索引数据的便捷函数,将其作为32位无符号整数的可变数组。
const uint *QSGGeometry::indexDataAsUInt() const
访问索引数据的便捷函数,将其作为32位无符号整数的不可变数组。
quint16 *QSGGeometry::indexDataAsUShort()
访问索引数据的便捷函数,将其作为16位无符号整数的可变数组。
const quint16 *QSGGeometry::indexDataAsUShort() const
访问索引数据的便捷函数,将其作为16位无符号整数的不可变数组。
QSGGeometry::DataPattern QSGGeometry::indexDataPattern() const
返回此几何体索引的使用模式。默认模式为AlwaysUploadPattern。
另请参阅setIndexDataPattern。
int QSGGeometry::indexType() const
返回此几何体对象中索引所使用的原始类型。
float QSGGeometry::lineWidth() const
获取当前用于此几何体的线宽或点宽。此属性仅在drawingMode为DrawLines或DrawLineStrip时适用。如果支持,也适用于点大小时drawingMode为DrawPoints。
默认值为1.0
注意:在运行时,根据平台和图形API,点线和绘制可能有限制。例如,一些API不支持点精灵,因此无法设置大小为1以外的值。
注意:1.0
的宽度始终受支持。
另请参阅setLineWidth和drawingMode。
void QSGGeometry::markIndexDataDirty()
标记该几何体的顶点已更改,必须重新上传。
该函数仅在顶点使用模式为StaticData并且渲染此几何体的渲染器将几何体上传到顶点缓冲对象(VBO)时才有作用。
void QSGGeometry::markVertexDataDirty()
标记该几何体的顶点已更改,必须重新上传。
该函数仅在顶点使用模式为StaticData并且渲染此几何体的渲染器将几何体上传到顶点缓冲对象(VBO)时才有作用。
void QSGGeometry::setDrawingMode(unsigned int mode)
设置用于绘制此几何体的mode。
默认值为QSGGeometry::DrawTriangleStrip。
另请参阅drawingMode和DrawingMode。
void QSGGeometry::setIndexDataPattern(QSGGeometry::DataPattern p)
设置索引的使用模式为p。
默认模式为AlwaysUploadPattern。当设置成默认模式以外的任何模式时,在改变索引数据后,用户必须调用markIndexDataDirty(),除此之外,还需要调用QSGNode::markDirty()并传入QSGNode::DirtyGeometry。
另请参阅indexDataPattern。
void QSGGeometry::setLineWidth(float width)
将该几何体的线或点宽度设置为width。此属性仅在drawingMode设置为DrawLines或DrawLineStrip时适用。如果支持,当drawingMode为DrawPoints时,也适用于点大小。
注意:在运行时,根据平台和图形API,点线和绘制可能有限制。例如,一些API不支持点精灵,因此无法设置大小为1以外的值。
注意:1.0
的宽度始终受支持。
另请参阅lineWidth()和drawingMode。
void QSGGeometry::setVertexDataPattern(QSGGeometry::DataPattern p)
将该顶点的使用模式设置为p。
默认模式为AlwaysUploadPattern。当设置成默认模式以外的任何模式时,在改变顶点数据后,用户必须调用markVertexDataDirty(),除此之外,还需要调用QSGNode::markDirty()并传入QSGNode::DirtyGeometry。
另请参阅vertexDataPattern。
int QSGGeometry::sizeOfIndex() const
返回索引类型的字节大小。
此值在索引类型为UnsignedShortType时为2
,在索引类型为UnsignedIntType时为4
。
int QSGGeometry::sizeOfVertex() const
返回一个顶点的字节大小。
此值来自属性。
[静态]
void QSGGeometry::updateColoredRectGeometry(QSGGeometry *g, const QRectF &rect)
使用rect中的坐标更新几何体g。
此函数假设几何体对象包含一个三角带条由QSGGeometry::ColoredPoint2D顶点组成
[静态]
void QSGGeometry::updateRectGeometry(QSGGeometry *g, const QRectF &rect)
使用rect中的坐标更新几何体g。
此函数假设几何体对象包含一个三角带条由QSGGeometry::Point2D顶点组成
[静态]
void QSGGeometry::updateTexturedRectGeometry(QSGGeometry *g, const QRectF &rect, const QRectF &textureRect)
使用矩形的坐标和纹理坐标从 textureRect 更新几何图形 g。
textureRect 应使用归一化坐标。
g 假设是一个由四个顶点组成的三角形带,顶点类型为 QSGGeometry::TexturedPoint2D。
int QSGGeometry::vertexCount() const
返回此几何对象中的顶点数。
void *QSGGeometry::vertexData()
返回指向此几何对象原始顶点数据的指针。
另请参阅vertexDataAsPoint2D() 和 vertexDataAsTexturedPoint2D。
const void *QSGGeometry::vertexData() const
返回指向此几何对象原始顶点数据的指针。
另请参阅vertexDataAsPoint2D() 和 vertexDataAsTexturedPoint2D。
QSGGeometry::ColoredPoint2D *QSGGeometry::vertexDataAsColoredPoint2D()
便利函数,用于以可变数组的形式访问顶点数据为 QSGGeometry::ColoredPoint2D。
const QSGGeometry::ColoredPoint2D *QSGGeometry::vertexDataAsColoredPoint2D() const
便利函数,用于以不可变数组的形式访问顶点数据为 QSGGeometry::ColoredPoint2D。
QSGGeometry::Point2D *QSGGeometry::vertexDataAsPoint2D()
便利函数,用于以可变数组的形式访问顶点数据为 QSGGeometry::Point2D。
const QSGGeometry::Point2D *QSGGeometry::vertexDataAsPoint2D() const
便利函数,用于以不可变数组的形式访问顶点数据为 QSGGeometry::Point2D。
QSGGeometry::TexturedPoint2D *QSGGeometry::vertexDataAsTexturedPoint2D()
便利函数,用于以可变数组的形式访问顶点数据为 QSGGeometry::TexturedPoint2D。
const QSGGeometry::TexturedPoint2D *QSGGeometry::vertexDataAsTexturedPoint2D() const
便利函数,用于以不可变数组的形式访问顶点数据为 QSGGeometry::TexturedPoint2D。
QSGGeometry::DataPattern QSGGeometry::vertexDataPattern() const
返回此几何对象中顶点的使用模式。默认模式是 AlwaysUploadPattern。
另请参阅setVertexDataPattern。
© 2024 The Qt Company Ltd. 本收录的文档贡献者是各自版权的所有者。本提供的文档遵循 Free Software Foundation 发布的 GNU Free Documentation License 版本 1.3 的条款。Qt和相应的标志是 The Qt Company Ltd. 在芬兰以及/或世界其他国家/地区的商标。所有其他商标均为其各自所有者的财产。