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.
Konstante | Wert | Beschreibung |
---|---|---|
QSGGeometry::UnknownAttribute | 0 | Unwichtig |
QSGGeometry::PositionAttribute | 1 | Standort |
QSGGeometry::ColorAttribute | 2 | Farbe |
QSGGeometry::TexCoordAttribute | 3 | Koordinate der Textur |
QSGGeometry::TexCoord1Attribute | 4 | Texturkoordinate 1 |
QSGGeometry::TexCoord2Attribute | 5 | Textur-Koordinate 2 |
enum QSGGeometry::DataPattern
Das DataPattern-Enum wird verwendet, um das Verwendungsmuster für die Scheitelpunkt- und Indexdaten in einem Geometrieobjekt anzugeben.
Konstante | Wert | Beschreibung |
---|---|---|
QSGGeometry::AlwaysUploadPattern | 0 | Die 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::DynamicPattern | 2 | Die 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::StaticPattern | 3 | Die 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::StreamPattern | 1 | Die 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.
Konstante | Wert |
---|---|
QSGGeometry::DrawPoints | 0x0000 |
QSGGeometry::DrawLines | 0x0001 |
QSGGeometry::DrawLineStrip | 0x0003 |
QSGGeometry::DrawTriangles | 0x0004 |
QSGGeometry::DrawTriangleStrip | 0x0005 |
enum QSGGeometry::Type
Gibt den Komponententyp in den Scheitelpunktdaten an.
Konstante | Wert | Beschreibung |
---|---|---|
QSGGeometry::ByteType | 0x1400 | |
QSGGeometry::UnsignedByteType | 0x1401 | |
QSGGeometry::ShortType | 0x1402 | |
QSGGeometry::UnsignedShortType | 0x1403 | |
QSGGeometry::IntType | 0x1404 | |
QSGGeometry::UnsignedIntType | 0x1405 | |
QSGGeometry::FloatType | 0x1406 | |
QSGGeometry::Bytes2Type | 0x1407 | Hinzugefügt in Qt 5.14. |
QSGGeometry::Bytes3Type | 0x1408 | Hinzugefügt in Qt 5.14. |
QSGGeometry::Bytes4Type | 0x1409 | Hinzugefügt in Qt 5.14. |
QSGGeometry::DoubleType | 0x140A | Hinzugefü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.