QSGGeometry Class

Die Klasse QSGGeometry bietet Low-Level-Speicher für Grafikprimitive im Qt Quick Scene Graph. Mehr...

Kopfzeile: #include <QSGGeometry>
CMake: find_package(Qt6 REQUIRED COMPONENTS Quick)
target_link_libraries(mytarget PRIVATE Qt6::Quick)
qmake: QT += quick

Öffentliche Typen

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 }

Öffentliche Funktionen

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

Statische öffentliche Mitglieder

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)

Detaillierte Beschreibung

Die Klasse QSGGeometry speichert die Geometrie der Primitive, die mit dem Szenegraphen gerendert werden. Sie enthält Vertexdaten und optional Indexdaten. Der Modus, der zum Zeichnen der Geometrie verwendet wird, auch Primitivtopologie genannt, wird mit setDrawingMode() angegeben.

Scheitelpunkte können so einfach sein wie Punkte, die durch x- und y-Werte definiert sind, oder sie können komplexer sein, wenn jeder Scheitelpunkt eine Normale, Texturkoordinaten und eine 3D-Position enthält. Die QSGGeometry::AttributeSet wird verwendet, um zu beschreiben, wie die Scheitelpunktdaten aufgebaut sind. Der Attributsatz kann nur bei der Konstruktion festgelegt werden. Die Klasse QSGGeometry bietet standardmäßig einige Komfortattribute und Attributsätze. Die Funktion defaultAttributes_Point2D() gibt einen Attributsatz zurück, der in normalen einfarbigen Rechtecken verwendet wird, während die Funktion defaultAttributes_TexturedPoint2D Attribute zurückgibt, die für texturierte 2D-Geometrie verwendet werden. Die Scheitelpunktdaten werden intern als void * gespeichert und sind mit der Funktion vertexData() zugänglich. Convenience Accessors für die allgemeinen Attributssätze sind mit vertexDataAsPoint2D() und vertexDataAsTexturedPoint2D() verfügbar. Scheitelpunktdaten werden durch Übergabe einer Scheitelpunktanzahl an den Konstruktor oder durch späteren Aufruf von allocate() zugewiesen.

Die QSGGeometry kann optional Indizes aus vorzeichenlosen 32-Bit-, vorzeichenlosen 16-Bit- oder vorzeichenlosen 8-Bit-Ganzzahlen enthalten. Der Indextyp muss während der Konstruktion angegeben werden und kann nicht geändert werden.

Der folgende Ausschnitt zeigt, wie eine Geometrie aus Positions- und Farbpunkten aufgebaut werden kann.

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);

Die QSGGeometrie ist ein Softwarepuffer und clientseitig in Bezug auf das beschleunigte Rendering, da die in 2D-Grafiken verwendeten Puffer typischerweise aus vielen kleinen Puffern bestehen, die sich bei jedem Frame ändern und nicht vom Hochladen in den Grafikspeicher profitieren. QSGGeometry unterstützt jedoch den Hinweis an den Renderer, dass ein Puffer mit Hilfe der Funktionen setVertexDataPattern() und setIndexDataPattern() hochgeladen werden sollte. Ob dieser Hinweis beachtet wird oder nicht, ist implementierungsspezifisch.

Hinweis: Alle Klassen mit QSG-Präfix sollten nur im Rendering-Thread des Szenegraphs verwendet werden. Siehe Scene Graph und Rendering für weitere Informationen.

Siehe auch QSGGeometryNode und Scene Graph - Custom Geometry.

Dokumentation der Mitgliedstypen

enum QSGGeometry::AttributeType

Diese Aufzählung identifiziert mehrere Attributtypen.

KonstanteWertBeschreibung
QSGGeometry::UnknownAttribute0Unwichtig
QSGGeometry::PositionAttribute1Standort
QSGGeometry::ColorAttribute2Farbe
QSGGeometry::TexCoordAttribute3Koordinate der Textur
QSGGeometry::TexCoord1Attribute4Texturkoordinate 1
QSGGeometry::TexCoord2Attribute5Textur-Koordinate 2

enum QSGGeometry::DataPattern

Das DataPattern-Enum wird verwendet, um das Verwendungsmuster für die Scheitelpunkt- und Indexdaten in einem Geometrieobjekt anzugeben.

KonstanteWertBeschreibung
QSGGeometry::AlwaysUploadPattern0Die Daten werden immer hochgeladen. Das bedeutet, dass der Benutzer Index- und Scheitelpunktdaten nicht explizit als schmutzig markieren muss, nachdem er sie geändert hat. Dies ist die Standardeinstellung.
QSGGeometry::DynamicPattern2Die Daten werden wiederholt geändert und viele Male gezeichnet. Dies ist ein Hinweis, der zu einer besseren Leistung führen kann. Wenn er gesetzt ist, muss der Benutzer sicherstellen, dass er die Daten nach dem Ändern als schmutzig markiert.
QSGGeometry::StaticPattern3Die Daten werden einmal geändert und viele Male gezeichnet. Dies ist ein Hinweis, der zu einer besseren Leistung führen kann. Wenn diese Option gesetzt ist, muss der Benutzer sicherstellen, dass die Daten nach dem Ändern als unsauber markiert werden.
QSGGeometry::StreamPattern1Die Daten werden fast jedes Mal geändert, wenn sie gezeichnet werden. Dies ist ein Hinweis, der zu einer besseren Leistung führen kann. Wenn er gesetzt ist, muss der Benutzer sicherstellen, dass er die Daten nach dem Ändern als schmutzig markiert.

enum QSGGeometry::DrawingMode

Gibt den Zeichenmodus an, auch primitive Topologie genannt.

Hinweis: Ab Qt 6 stellt der Szenegraph nur noch Topologien zur Verfügung, die von allen unterstützten 3D-Grafik-APIs unterstützt werden. Infolgedessen werden die Werte DrawLineLoop und DrawTriangleFan zur Laufzeit in Qt 6 nicht mehr unterstützt, obwohl die Enum-Werte selbst noch vorhanden sind.

KonstanteWert
QSGGeometry::DrawPoints0x0000
QSGGeometry::DrawLines0x0001
QSGGeometry::DrawLineStrip0x0003
QSGGeometry::DrawTriangles0x0004
QSGGeometry::DrawTriangleStrip0x0005

enum QSGGeometry::Type

Gibt den Komponententyp in den Scheitelpunktdaten an.

KonstanteWertBeschreibung
QSGGeometry::ByteType0x1400
QSGGeometry::UnsignedByteType0x1401
QSGGeometry::ShortType0x1402
QSGGeometry::UnsignedShortType0x1403
QSGGeometry::IntType0x1404
QSGGeometry::UnsignedIntType0x1405
QSGGeometry::FloatType0x1406
QSGGeometry::Bytes2Type0x1407Hinzugefügt in Qt 5.14.
QSGGeometry::Bytes3Type0x1408Hinzugefügt in Qt 5.14.
QSGGeometry::Bytes4Type0x1409Hinzugefügt in Qt 5.14.
QSGGeometry::DoubleType0x140AHinzugefügt in Qt 5.14.

Member Function Dokumentation

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

Konstruiert ein Geometrieobjekt auf der Grundlage von attributes.

Das Objekt weist Platz für vertexCount Scheitelpunkte zu, basierend auf der kumulierten Größe in attributes und für indexCount.

indexType kann UnsignedShortType oder UnsignedIntType sein. Die Unterstützung für Letzteres hängt von der zur Laufzeit verwendeten Grafik-API-Implementierung ab und ist möglicherweise nicht immer verfügbar.

Geometrieobjekte werden standardmäßig mit DrawTriangleStrip als Zeichenmodus erstellt.

Hinweis: attributes und die von ihm referenzierten Attribute Objekte müssen während der gesamten Lebensdauer von QSGGeometry gültig bleiben. QSGGeometry speichert eine Referenz auf attributes und löscht die Attribute Objekte nicht.

[virtual noexcept] QSGGeometry::~QSGGeometry()

Zerstört das Geometrieobjekt und die ihm zugewiesenen Scheitelpunkt- und Indexdaten.

void QSGGeometry::allocate(int vertexCount, int indexCount = 0)

Ändert die Größe der Scheitelpunkt- und Indexdaten dieses Geometrieobjekts, damit sie in die vertexCount Scheitelpunkte und indexCount Indizes passen.

Scheitelpunkt- und Indexdaten werden nach diesem Aufruf ungültig, und der Aufrufer muß den zugehörigen Geometrieknoten als schmutzig markieren, indem er node->markDirty(QSGNode::DirtyGeometry) aufruft, um sicherzustellen, daß der Renderer die Möglichkeit hat, die internen Puffer zu aktualisieren.

int QSGGeometry::attributeCount() const

Gibt die Anzahl der Attribute im Attributsatz zurück, die von dieser Geometrie verwendet werden.

const QSGGeometry::Attribute *QSGGeometry::attributes() const

Gibt ein Array mit den Attributen dieser Geometrie zurück. Die Größe des Arrays wird mit attributeCount() angegeben.

[static] const QSGGeometry::AttributeSet &QSGGeometry::defaultAttributes_ColoredPoint2D()

Convenience-Funktion, die Attribute zurückgibt, die für farbige 2D-Zeichnungen pro Scheitelpunkt verwendet werden können.

[static] const QSGGeometry::AttributeSet &QSGGeometry::defaultAttributes_Point2D()

Convenience-Funktion, die Attribute zurückgibt, die für das Zeichnen von 2D-Volltonfarben verwendet werden können.

[static] const QSGGeometry::AttributeSet &QSGGeometry::defaultAttributes_TexturedPoint2D()

Convenience-Funktion, die Attribute zurückgibt, die für texturierte 2D-Zeichnungen verwendet werden können.

unsigned int QSGGeometry::drawingMode() const

Gibt den Zeichenmodus dieser Geometrie zurück.

Der Standardwert ist DrawTriangleStrip.

Siehe auch setDrawingMode().

int QSGGeometry::indexCount() const

Gibt die Anzahl der Indizes in diesem Geometrieobjekt zurück.

void *QSGGeometry::indexData()

Gibt einen Zeiger auf die Rohindexdaten dieses Geometrieobjekts zurück.

Siehe auch indexDataAsUShort() und indexDataAsUInt().

const void *QSGGeometry::indexData() const

Gibt einen Zeiger auf die Rohindexdaten dieses Geometrieobjekts zurück.

Siehe auch indexDataAsUShort() und indexDataAsUInt().

uint *QSGGeometry::indexDataAsUInt()

Convenience-Funktion für den Zugriff auf die Indexdaten als veränderbares Array von 32-Bit-Ganzzahlen ohne Vorzeichen.

const uint *QSGGeometry::indexDataAsUInt() const

Convenience-Funktion für den Zugriff auf die Indexdaten als unveränderliches Array von 32-Bit-Ganzzahlen ohne Vorzeichen.

quint16 *QSGGeometry::indexDataAsUShort()

Convenience-Funktion für den Zugriff auf die Indexdaten als veränderbares Array von 16-Bit-Ganzzahlen ohne Vorzeichen.

const quint16 *QSGGeometry::indexDataAsUShort() const

Convenience-Funktion für den Zugriff auf die Indexdaten als unveränderliches Array von 16-Bit-Ganzzahlen ohne Vorzeichen.

QSGGeometry::DataPattern QSGGeometry::indexDataPattern() const

Gibt das Verwendungsmuster für Indizes in dieser Geometrie zurück. Das Standardmuster ist AlwaysUploadPattern.

Siehe auch setIndexDataPattern().

int QSGGeometry::indexType() const

Gibt den primitiven Typ zurück, der für Indizes in diesem Geometrieobjekt verwendet wird.

float QSGGeometry::lineWidth() const

Ruft die aktuelle Linien- oder Punktbreite ab, die für diese Geometrie verwendet werden soll. Diese Eigenschaft gilt nur für die Linienbreite, wenn drawingMode DrawLines oder DrawLineStrip ist. Wenn unterstützt, gilt sie auch für die Punktgröße, wenn drawingMode DrawPoints ist.

Der Standardwert ist 1.0

Hinweis: Die Unterstützung für das Zeichnen von Punkten und Linien kann je nach Plattform und Grafik-API zur Laufzeit eingeschränkt sein. Einige APIs unterstützen zum Beispiel keine Punkt-Sprites, so dass die Einstellung einer anderen Größe als 1 nicht möglich ist.

Hinweis: Die Breite von 1.0 wird immer unterstützt.

Siehe auch setLineWidth() und drawingMode().

void QSGGeometry::markIndexDataDirty()

Markieren Sie, dass sich die Scheitelpunkte in dieser Geometrie geändert haben und erneut hochgeladen werden müssen.

Diese Funktion wirkt sich nur aus, wenn das Verwendungsmuster für Scheitelpunkte StaticData ist und der Renderer, der diese Geometrie rendert, die Geometrie in Vertex Buffer Objects (VBOs) hochlädt.

void QSGGeometry::markVertexDataDirty()

Markieren Sie, dass sich die Scheitelpunkte in dieser Geometrie geändert haben und erneut hochgeladen werden müssen.

Diese Funktion wirkt sich nur aus, wenn das Verwendungsmuster für Scheitelpunkte StaticData ist und der Renderer, der diese Geometrie rendert, die Geometrie in Vertex Buffer Objects (VBOs) hochlädt.

void QSGGeometry::setDrawingMode(unsigned int mode)

Legt die mode fest, die für das Zeichnen dieser Geometrie verwendet werden soll.

Der Standardwert ist QSGGeometry::DrawTriangleStrip.

Siehe auch drawingMode() und DrawingMode.

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

Legt das Verwendungsmuster für Indizes auf p fest.

Die Standardeinstellung ist AlwaysUploadPattern. Wenn eine andere Einstellung als die Standardeinstellung gewählt wird, muss der Benutzer nach dem Ändern der Indexdaten zusätzlich zum Aufruf von QSGNode::markDirty() mit QSGNode::DirtyGeometry markIndexDataDirty () aufrufen.

Siehe auch indexDataPattern().

void QSGGeometry::setLineWidth(float width)

Legt die für diese Geometrie zu verwendende Linien- oder Punktbreite auf width fest. Diese Eigenschaft gilt nur für die Linienbreite, wenn drawingMode DrawLines oder DrawLineStrip ist. Wenn unterstützt, gilt sie auch für die Punktgröße, wenn drawingMode DrawPoints ist.

Hinweis: Die Unterstützung für das Zeichnen von Punkten und Linien kann zur Laufzeit je nach Plattform und Grafik-API eingeschränkt sein. Einige APIs unterstützen z. B. keine Punkt-Sprites, so dass die Einstellung einer anderen Größe als 1 nicht möglich ist.

Hinweis: Die Breite von 1.0 wird immer unterstützt.

Siehe auch lineWidth() und drawingMode().

void QSGGeometry::setVertexDataPattern(QSGGeometry::DataPattern p)

Setzt das Verwendungsmuster für Scheitelpunkte auf p.

Die Standardeinstellung ist AlwaysUploadPattern. Wenn eine andere Einstellung als die Standardeinstellung gewählt wird, muss der Benutzer nach dem Ändern der Scheitelpunktdaten markVertexDataDirty() aufrufen, zusätzlich zum Aufruf von QSGNode::markDirty() mit QSGNode::DirtyGeometry.

Siehe auch vertexDataPattern().

int QSGGeometry::sizeOfIndex() const

Gibt die Bytegröße des Indextyps zurück.

Dieser Wert ist entweder 2, wenn der Indextyp UnsignedShortType ist, oder 4, wenn der Indextyp UnsignedIntType ist.

int QSGGeometry::sizeOfVertex() const

Gibt die Größe eines Scheitelpunkts in Bytes zurück.

Dieser Wert stammt aus den Attributen.

[static] void QSGGeometry::updateColoredRectGeometry(QSGGeometry *g, const QRectF &rect)

Aktualisiert die Geometrie g mit den Koordinaten in rect.

Die Funktion geht davon aus, dass das Geometrieobjekt einen einzelnen Dreiecksstreifen mit QSGGeometry::ColoredPoint2D Scheitelpunkten enthält

[static] void QSGGeometry::updateRectGeometry(QSGGeometry *g, const QRectF &rect)

Aktualisiert die Geometrie g mit den Koordinaten in rect.

Die Funktion geht davon aus, dass das Geometrieobjekt einen einzelnen Dreiecksstreifen mit QSGGeometry::Point2D Scheitelpunkten enthält

[static] void QSGGeometry::updateTexturedRectGeometry(QSGGeometry *g, const QRectF &rect, const QRectF &textureRect)

Aktualisiert die Geometrie g mit den Koordinaten in rect und den Texturkoordinaten von textureRect.

textureRect sollte in normalisierten Koordinaten vorliegen.

g wird als Dreiecksstreifen mit vier Scheitelpunkten des Typs QSGGeometry::TexturedPoint2D angenommen.

int QSGGeometry::vertexCount() const

Gibt die Anzahl der Scheitelpunkte in diesem Geometrieobjekt zurück.

void *QSGGeometry::vertexData()

Gibt einen Zeiger auf die rohen Scheitelpunktdaten dieses Geometrieobjekts zurück.

Siehe auch vertexDataAsPoint2D() und vertexDataAsTexturedPoint2D().

const void *QSGGeometry::vertexData() const

Gibt einen Zeiger auf die rohen Scheitelpunktdaten dieses Geometrieobjekts zurück.

Siehe auch vertexDataAsPoint2D() und vertexDataAsTexturedPoint2D().

QSGGeometry::ColoredPoint2D *QSGGeometry::vertexDataAsColoredPoint2D()

Convenience-Funktion für den Zugriff auf die Vertex-Daten als veränderbares Array von QSGGeometry::ColoredPoint2D.

const QSGGeometry::ColoredPoint2D *QSGGeometry::vertexDataAsColoredPoint2D() const

Convenience-Funktion zum Zugriff auf die Scheitelpunktdaten als unveränderliches Array von QSGGeometry::ColoredPoint2D.

QSGGeometry::Point2D *QSGGeometry::vertexDataAsPoint2D()

Convenience-Funktion für den Zugriff auf die Scheitelpunktdaten als veränderbares Array von QSGGeometry::Point2D.

const QSGGeometry::Point2D *QSGGeometry::vertexDataAsPoint2D() const

Convenience-Funktion zum Zugriff auf die Scheitelpunktdaten als unveränderliches Array von QSGGeometry::Point2D.

QSGGeometry::TexturedPoint2D *QSGGeometry::vertexDataAsTexturedPoint2D()

Convenience-Funktion für den Zugriff auf die Scheitelpunktdaten als veränderbares Array von QSGGeometry::TexturedPoint2D.

const QSGGeometry::TexturedPoint2D *QSGGeometry::vertexDataAsTexturedPoint2D() const

Convenience-Funktion zum Zugriff auf die Scheitelpunktdaten als unveränderliches Array von QSGGeometry::TexturedPoint2D.

QSGGeometry::DataPattern QSGGeometry::vertexDataPattern() const

Gibt das Verwendungsmuster für Scheitelpunkte in dieser Geometrie zurück. Das Standardmuster ist AlwaysUploadPattern.

Siehe auch setVertexDataPattern().

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.