QSGGeometry 类

QSGGeometry 类提供对 Qt Quick 场景图图形原语的低级别存储。 更多...

头文件 #include <QSGGeometry>
CMakefind_package(Qt6 REQUIRED COMPONENTS Quick)
target_link_libraries(mytarget PRIVATE Qt6::Quick)
qmakeQT += quick

公共类型

structAttribute
structAttributeSet
structColoredPoint2D
structPoint2D
structTexturedPoint2D
enumAttributeType { UnknownAttribute, PositionAttribute, ColorAttribute, TexCoordAttribute, TexCoord1Attribute, TexCoord2Attribute }
enumDataPattern { AlwaysUploadPattern, DynamicPattern, StaticPattern, StreamPattern }
enumDrawingMode { DrawPoints, DrawLines, DrawLineStrip, DrawTriangles, DrawTriangleStrip }
enumType { ByteType, UnsignedByteType, ShortType, UnsignedShortType, IntType, …, DoubleType }

公共函数

QSGGeometry(const QSGGeometry::AttributeSet &attributes, int vertexCount, int indexCount = 0, int indexType = UnsignedShortType)
virtual~QSGGeometry()
voidallocate(int vertexCount, int indexCount = 0)
intattributeCount() const
const QSGGeometry::Attribute *attributes() const
unsigned intdrawingMode() const
intindexCount() const
void *indexData()
const void *indexData() const
uint *indexDataAsUInt()
const uint *indexDataAsUInt() const
quint16 *indexDataAsUShort()
const quint16 *indexDataAsUShort() const
QSGGeometry::DataPatternindexDataPattern() const
intindexType() const
floatlineWidth() const
voidmarkIndexDataDirty()
voidmarkVertexDataDirty()
voidsetDrawingMode(unsigned int mode)
voidsetIndexDataPattern(QSGGeometry::DataPattern p)
voidsetLineWidth(float width)
voidsetVertexDataPattern(QSGGeometry::DataPattern p)
intsizeOfIndex() const
intsizeOfVertex() const
intvertexCount() 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::DataPatternvertexDataPattern() const

静态公共成员

const QSGGeometry::AttributeSet &defaultAttributes_ColoredPoint2D()
const QSGGeometry::AttributeSet &defaultAttributes_Point2D()
const QSGGeometry::AttributeSet &defaultAttributes_TexturedPoint2D()
voidupdateColoredRectGeometry(QSGGeometry *g, const QRectF &rect)
voidupdateRectGeometry(QSGGeometry *g, const QRectF &rect)
voidupdateTexturedRectGeometry(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::UnknownAttribute0不关心
QSGGeometry::PositionAttribute1位置
QSGGeometry::ColorAttribute2颜色
QSGGeometry::TexCoordAttribute3纹理坐标
QSGGeometry::TexCoord1Attribute4纹理坐标1
QSGGeometry::TexCoord2Attribute5纹理坐标2

enum QSGGeometry::DataPattern

DataPattern枚举用于指定几何对象中顶点和索引数据的用法。

常量描述
QSGGeometry::AlwaysUploadPattern0数据始终上传。这意味着用户在更改后无需明确将索引和顶点数据标记为“脏”。这是默认设置。
QSGGeometry::DynamicPattern2数据被多次修改,并多次绘制。这是一个可能提供更好性能的提示。当设置时应确保在更改后标记数据为“脏”。
QSGGeometry::StaticPattern3数据只被修改一次,并多次绘制。这是一个可能提高性能的提示。当设置时,用户应确保更改后标记数据为“脏”。
QSGGeometry::StreamPattern1几乎每次绘制都会修改数据。这是一个可能提高性能的提示。设置后,用户必须确保更改后标记数据为“脏”。

enum QSGGeometry::DrawingMode

指定绘制模式,也称为原语拓扑。

注意:从Qt 6开始,场景图仅公开跨所有支持3D图形API的功能拓扑。因此,虽然枚举值本身仍然存在,但在Qt 6的运行时不再支持DrawLineLoopDrawTriangleFan的值。

常量
QSGGeometry::DrawPoints0x0000
QSGGeometry::DrawLines0x0001
QSGGeometry::DrawLineStrip0x0003
QSGGeometry::DrawTriangles0x0004
QSGGeometry::DrawTriangleStrip0x0005

enum QSGGeometry::Type

指定顶点数据中的组件类型。

常量描述
QSGGeometry::ByteType0x1400 
QSGGeometry::UnsignedByteType0x1401 
QSGGeometry::ShortType0x1402 
QSGGeometry::UnsignedShortType0x1403 
QSGGeometry::IntType0x1404 
QSGGeometry::UnsignedIntType0x1405 
QSGGeometry::FloatType0x1406 
QSGGeometry::Bytes2Type0x1407自Qt 5.14开始添加。
QSGGeometry::Bytes3Type0x1408自Qt 5.14开始添加。
QSGGeometry::Bytes4Type0x1409自Qt 5.14开始添加。
QSGGeometry::DoubleType0x140A自Qt 5.14开始添加。

成员函数文档

QSGGeometry::QSGGeometry(const QSGGeometry::AttributeSet &attributes, int vertexCount, int indexCount = 0, int indexType = UnsignedShortType)

根据attributes构建几何对象。

根据attributes累积的大小,分配空间以存储vertexCount个顶点,以及存储indexCount

indexType可以是UnsignedShortTypeUnsignedIntType。对后者的支持取决于运行时使用的图形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

获取当前用于此几何体的线宽或点宽。此属性仅在drawingModeDrawLinesDrawLineStrip时适用。如果支持,也适用于点大小时drawingModeDrawPoints

默认值为1.0

注意:在运行时,根据平台和图形API,点线和绘制可能有限制。例如,一些API不支持点精灵,因此无法设置大小为1以外的值。

注意1.0的宽度始终受支持。

另请参阅setLineWidthdrawingMode

void QSGGeometry::markIndexDataDirty()

标记该几何体的顶点已更改,必须重新上传。

该函数仅在顶点使用模式为StaticData并且渲染此几何体的渲染器将几何体上传到顶点缓冲对象(VBO)时才有作用。

void QSGGeometry::markVertexDataDirty()

标记该几何体的顶点已更改,必须重新上传。

该函数仅在顶点使用模式为StaticData并且渲染此几何体的渲染器将几何体上传到顶点缓冲对象(VBO)时才有作用。

void QSGGeometry::setDrawingMode(unsigned int mode)

设置用于绘制此几何体的mode

默认值为QSGGeometry::DrawTriangleStrip

另请参阅drawingModeDrawingMode

void QSGGeometry::setIndexDataPattern(QSGGeometry::DataPattern p)

设置索引的使用模式为p

默认模式为AlwaysUploadPattern。当设置成默认模式以外的任何模式时,在改变索引数据后,用户必须调用markIndexDataDirty(),除此之外,还需要调用QSGNode::markDirty()并传入QSGNode::DirtyGeometry

另请参阅indexDataPattern

void QSGGeometry::setLineWidth(float width)

将该几何体的线或点宽度设置为width。此属性仅在drawingMode设置为DrawLinesDrawLineStrip时适用。如果支持,当drawingModeDrawPoints时,也适用于点大小。

注意:在运行时,根据平台和图形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. 在芬兰以及/或世界其他国家/地区的商标。所有其他商标均为其各自所有者的财产。