QSGGeometry Class
La clase QSGGeometry proporciona almacenamiento de bajo nivel para primitivas gráficas en Qt Quick Scene Graph. Más...
| Cabecera: | #include <QSGGeometry> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Quick)target_link_libraries(mytarget PRIVATE Qt6::Quick) |
| qmake: | QT += quick |
Tipos Públicos
| 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 } |
Funciones públicas
| 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) |
(since 6.10) void | setIndexCount(int count) |
| void | setIndexDataPattern(QSGGeometry::DataPattern p) |
| void | setLineWidth(float width) |
(since 6.10) void | setVertexCount(int count) |
| 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 |
Miembros públicos estáticos
| 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) |
Descripción Detallada
La clase QSGGeometry almacena la geometría de las primitivas renderizadas con el gráfico de escena. Contiene datos de vértices y opcionalmente datos de índices. El modo utilizado para dibujar la geometría, también llamado topología primitiva, se especifica con setDrawingMode().
Los vértices pueden ser tan simples como puntos definidos por valores x e y o pueden ser más complejos donde cada vértice contiene una normal, coordenadas de textura y una posición 3D. QSGGeometry::AttributeSet se utiliza para describir cómo se construyen los datos de los vértices. El conjunto de atributos sólo puede especificarse en la construcción. La clase QSGGeometry proporciona algunos atributos y conjuntos de atributos por defecto. La función defaultAttributes_Point2D() devuelve un conjunto de atributos a utilizar en rectángulos normales de color sólido, mientras que la función defaultAttributes_TexturedPoint2D devuelve atributos a utilizar en geometría 2D texturizada. Los datos de vértice se almacenan internamente como void * y son accesibles con la función vertexData(). Los accesores de conveniencia para los conjuntos de atributos comunes están disponibles con vertexDataAsPoint2D() y vertexDataAsTexturedPoint2D(). Los datos de vértice se asignan pasando un recuento de vértices al constructor o llamando a allocate() posteriormente.
El número de vértices e índices puede cambiarse después de la construcción utilizando el método allocate() para redimensionar el buffer de datos. Sin embargo, allocate() requiere actualizar todos los datos de vértices e índices cada vez que se llama. Desde Qt 6.10, setVertexCount() y setIndexCount() permiten ajustar el número de vértices o índices sin reasignar el buffer de datos y sólo requieren actualizar los nuevos vértices o índices. En cualquier caso, el llamador debe marcar el nodo de geometría como sucio, llamando a node->markDirty(QSGNode::DirtyGeometry), para asegurar que el renderizador tiene la oportunidad de actualizar los buffers internos.
QSGGeometry puede contener opcionalmente índices de 32 bits sin signo, 16 bits sin signo o enteros de 8 bits sin signo. El tipo de índice debe especificarse durante la construcción y no puede modificarse.
A continuación se muestra un fragmento que ilustra cómo puede construirse una geometría compuesta por vértices de posición y color.
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);
La geometría QSGGeometry es un búfer de software y del lado del cliente en términos de renderizado acelerado, ya que los búferes utilizados en gráficos 2D suelen consistir en muchos búferes pequeños que cambian cada fotograma y no se benefician de ser cargados en la memoria gráfica. Sin embargo, QSGGeometry permite indicar al renderizador que debe cargar un búfer mediante las funciones setVertexDataPattern() y setIndexDataPattern(). Si esta indicación se respeta o no es específico de la implementación.
Nota: Todas las clases con el prefijo QSG deben utilizarse únicamente en el hilo de renderizado del gráfico de escena. Ver Gráfico de Escena y Renderizado para más información.
Véase también QSGGeometryNode y Gráfico de escena - Geometría personalizada.
Documentación de tipos de miembros
enum QSGGeometry::AttributeType
Este enum identifica varios tipos de atributos.
| Constante | Valor | Descripción |
|---|---|---|
QSGGeometry::UnknownAttribute | 0 | No importa |
QSGGeometry::PositionAttribute | 1 | Posición |
QSGGeometry::ColorAttribute | 2 | Color |
QSGGeometry::TexCoordAttribute | 3 | Coordenada de textura |
QSGGeometry::TexCoord1Attribute | 4 | Coordenada de textura 1 |
QSGGeometry::TexCoord2Attribute | 5 | Coordenada de textura 2 |
enum QSGGeometry::DataPattern
El enum DataPattern se utiliza para especificar el patrón de uso de los datos de vértices e índices en un objeto geométrico.
| Constante | Valor | Descripción |
|---|---|---|
QSGGeometry::AlwaysUploadPattern | 0 | Los datos se cargan siempre. Esto significa que el usuario no necesita marcar explícitamente los datos de índice y vértice como sucios después de cambiarlos. Este es el valor por defecto. |
QSGGeometry::DynamicPattern | 2 | Los datos se modifican repetidamente y se dibujan muchas veces. Esta es una sugerencia que puede proporcionar un mejor rendimiento. Cuando se establece, el usuario debe asegurarse de marcar los datos como sucios después de cambiarlos. |
QSGGeometry::StaticPattern | 3 | Los datos se modifican una vez y se dibujan muchas veces. Esta es una sugerencia que puede proporcionar un mejor rendimiento. Cuando se establece, el usuario debe asegurarse de marcar los datos como sucios después de modificarlos. |
QSGGeometry::StreamPattern | 1 | Los datos se modifican casi cada vez que se dibujan. Esta es una sugerencia que puede proporcionar un mejor rendimiento. Cuando se establece, el usuario debe asegurarse de marcar los datos como sucios después de cambiarlos. |
enum QSGGeometry::DrawingMode
Especifica el modo de dibujo, también llamado topología primitiva.
Nota: A partir de Qt 6 el gráfico de escena sólo expone topologías que son compatibles con todas las APIs de gráficos 3D soportadas. Como resultado, los valores DrawLineLoop y DrawTriangleFan ya no están soportados en tiempo de ejecución en Qt 6, aunque los valores enum siguen estando presentes.
| Constante | Valor |
|---|---|
QSGGeometry::DrawPoints | 0x0000 |
QSGGeometry::DrawLines | 0x0001 |
QSGGeometry::DrawLineStrip | 0x0003 |
QSGGeometry::DrawTriangles | 0x0004 |
QSGGeometry::DrawTriangleStrip | 0x0005 |
enum QSGGeometry::Type
Especifica el tipo de componente en los datos de vértice.
| Constante | Valor | Descripción |
|---|---|---|
QSGGeometry::ByteType | 0x1400 | |
QSGGeometry::UnsignedByteType | 0x1401 | |
QSGGeometry::ShortType | 0x1402 | |
QSGGeometry::UnsignedShortType | 0x1403 | |
QSGGeometry::IntType | 0x1404 | |
QSGGeometry::UnsignedIntType | 0x1405 | |
QSGGeometry::FloatType | 0x1406 | |
QSGGeometry::Bytes2Type | 0x1407 | Añadido en Qt 5.14. |
QSGGeometry::Bytes3Type | 0x1408 | Añadido en Qt 5.14. |
QSGGeometry::Bytes4Type | 0x1409 | Añadido en Qt 5.14. |
QSGGeometry::DoubleType | 0x140A | Añadido en Qt 5.14. |
Documentación de la Función Miembro
QSGGeometry::QSGGeometry(const QSGGeometry::AttributeSet &attributes, int vertexCount, int indexCount = 0, int indexType = UnsignedShortType)
Construye un objeto geométrico basado en attributes.
El objeto asigna espacio para vertexCount vértices basado en el tamaño acumulado en attributes y para indexCount.
El indexType puede ser UnsignedShortType o UnsignedIntType. El soporte para este último depende de la implementación de la API gráfica utilizada en tiempo de ejecución, y puede no estar siempre disponible.
Los objetos geométricos se construyen por defecto con DrawTriangleStrip como modo de dibujo.
Nota: attributes y los objetos Attribute referenciados por él deben permanecer válidos durante todo el tiempo de vida del QSGGeometry. QSGGeometry almacena una referencia a attributes y no borra los objetos Attribute.
[virtual noexcept] QSGGeometry::~QSGGeometry()
Destruye el objeto geométrico y los datos de vértices e índices que tiene asignados.
void QSGGeometry::allocate(int vertexCount, int indexCount = 0)
Redimensiona los datos de vértices e índices de este objeto geométrico para que quepan vertexCount vértices y indexCount índices y establece el número de vértices e índices en consecuencia.
Utilice setVertexCount() o setIndexCount() para cambiar el número de vértices o índices sin volver a llamar a allocate().
Los datos de vértices e índices serán invalidados después de esta llamada y el invocador debe marcar el nodo geométrico asociado como sucio, llamando a node->markDirty(QSGNode::DirtyGeometry), para asegurar que el renderizador tiene la oportunidad de actualizar los buffers internos.
Véase también setVertexCount() y setIndexCount().
int QSGGeometry::attributeCount() const
Devuelve el número de atributos del conjunto de atributos utilizado por esta geometría.
const QSGGeometry::Attribute *QSGGeometry::attributes() const
Devuelve una matriz con los atributos de esta geometría. El tamaño de la matriz se indica con attributeCount().
[static] const QSGGeometry::AttributeSet &QSGGeometry::defaultAttributes_ColoredPoint2D()
Función de conveniencia que devuelve atributos que se utilizarán para el dibujo 2D coloreado por vértice.
[static] const QSGGeometry::AttributeSet &QSGGeometry::defaultAttributes_Point2D()
Función de conveniencia que devuelve atributos que se utilizarán para dibujar colores sólidos en 2D.
[static] const QSGGeometry::AttributeSet &QSGGeometry::defaultAttributes_TexturedPoint2D()
Función de conveniencia que devuelve atributos que se utilizarán para el dibujo 2D texturizado.
unsigned int QSGGeometry::drawingMode() const
Devuelve el modo de dibujo de esta geometría.
El valor por defecto es DrawTriangleStrip.
Véase también setDrawingMode().
int QSGGeometry::indexCount() const
Devuelve el número de índices que se procesan cuando se renderiza el objeto geométrico.
Véase también setIndexCount().
void *QSGGeometry::indexData()
Devuelve un puntero a los datos de índice sin procesar de este objeto geométrico.
Véase también indexDataAsUShort() y indexDataAsUInt().
const void *QSGGeometry::indexData() const
Devuelve un puntero a los datos de índice sin procesar de este objeto geométrico.
Véase también indexDataAsUShort() y indexDataAsUInt().
uint *QSGGeometry::indexDataAsUInt()
Función de conveniencia para acceder a los datos de índice como una matriz mutable de enteros de 32 bits sin signo.
const uint *QSGGeometry::indexDataAsUInt() const
Función de conveniencia para acceder a los datos de índice como una matriz inmutable de enteros de 32 bits sin signo.
quint16 *QSGGeometry::indexDataAsUShort()
Función de conveniencia para acceder a los datos de índice como una matriz mutable de enteros de 16 bits sin signo.
const quint16 *QSGGeometry::indexDataAsUShort() const
Función de conveniencia para acceder a los datos de índice como una matriz inmutable de enteros de 16 bits sin signo.
QSGGeometry::DataPattern QSGGeometry::indexDataPattern() const
Devuelve el patrón de uso de los índices en esta geometría. El patrón por defecto es AlwaysUploadPattern.
Véase también setIndexDataPattern().
int QSGGeometry::indexType() const
Devuelve el tipo primitivo utilizado para los índices en este objeto geométrico.
float QSGGeometry::lineWidth() const
Obtiene el ancho de línea o de punto actual o que se utilizará para esta geometría. Esta propiedad sólo se aplica a la anchura de línea cuando drawingMode es DrawLines o DrawLineStrip. Cuando se admite, también se aplica al tamaño de punto cuando drawingMode es DrawPoints.
El valor por defecto es 1.0
Nota: El soporte para el dibujo de puntos y líneas puede estar limitado en tiempo de ejecución, dependiendo de la plataforma y de la API gráfica. Por ejemplo, algunas API no admiten sprites de puntos, por lo que no es posible establecer un tamaño distinto de 1.
Nota: Siempre se admite la anchura de 1.0.
Véase también setLineWidth() y drawingMode().
void QSGGeometry::markIndexDataDirty()
Marca que los vértices de esta geometría han cambiado y deben cargarse de nuevo.
Esta función sólo tiene efecto cuando el patrón de uso de los vértices es StaticData y el renderizador que renderiza esta geometría carga la geometría en Vertex Buffer Objects (VBOs).
void QSGGeometry::markVertexDataDirty()
Marca que los vértices de esta geometría han cambiado y deben cargarse de nuevo.
Esta función sólo tiene efecto cuando el patrón de uso de los vértices es StaticData y el renderizador que renderiza esta geometría carga la geometría en Vertex Buffer Objects (VBOs).
void QSGGeometry::setDrawingMode(unsigned int mode)
Establece la dirección mode que se utilizará para dibujar esta geometría.
El valor por defecto es QSGGeometry::DrawTriangleStrip.
Véase también drawingMode() y DrawingMode.
[since 6.10] void QSGGeometry::setIndexCount(int count)
Establece el número de índices que se procesarán cada vez que se renderice el objeto geométrico.
La dirección count no se valida y es responsabilidad del usuario asegurarse de que sólo se especifican valores comprendidos entre cero y el número de índices asignados.
Los datos de vértices e índices no se invalidan después de esta llamada, pero el que llama debe marcar el nodo de geometría como sucio, llamando a node->markDirty(QSGNode::DirtyGeometry), para asegurarse de que el renderizador tiene la oportunidad de actualizar los buffers internos.
Esta función se introdujo en Qt 6.10.
Véase también indexCount().
void QSGGeometry::setIndexDataPattern(QSGGeometry::DataPattern p)
Establece el patrón de uso de los índices en p.
El valor por defecto es AlwaysUploadPattern. Cuando se establece a cualquier otro valor que no sea el predeterminado, el usuario debe llamar a markIndexDataDirty() después de cambiar los datos del índice, además de llamar a QSGNode::markDirty() con QSGNode::DirtyGeometry.
Véase también indexDataPattern().
void QSGGeometry::setLineWidth(float width)
Establece la anchura de línea o de punto que se utilizará para esta geometría en width. Esta propiedad sólo se aplica a la anchura de línea cuando drawingMode es DrawLines o DrawLineStrip. Cuando se admite, también se aplica al tamaño de punto cuando drawingMode es DrawPoints.
Nota: La compatibilidad con el dibujo de puntos y líneas puede estar limitada en tiempo de ejecución, dependiendo de la plataforma y de la API gráfica. Por ejemplo, algunas API no admiten sprites de puntos, por lo que no es posible establecer un tamaño distinto de 1.
Nota: Siempre se admite la anchura de 1.0.
Véase también lineWidth() y drawingMode().
[since 6.10] void QSGGeometry::setVertexCount(int count)
Establece el número de vértices a renderizar.
count no se valida y es responsabilidad del usuario asegurarse de que sólo se especifican valores entre cero y el número de vértices asignados.
Los datos de vértices no se invalidan después de esta llamada, pero el llamador debe marcar el nodo de geometría como sucio, llamando a node->markDirty(QSGNode::DirtyGeometry), para asegurarse de que el renderizador tiene la oportunidad de actualizar los buffers internos.
Esta función se introdujo en Qt 6.10.
Véase también vertexCount().
void QSGGeometry::setVertexDataPattern(QSGGeometry::DataPattern p)
Establece el patrón de uso de los vértices en p.
El valor por defecto es AlwaysUploadPattern. Cuando se establece a cualquier otro valor que no sea el predeterminado, el usuario debe llamar a markVertexDataDirty() después de cambiar los datos de vértice, además de llamar a QSGNode::markDirty() con QSGNode::DirtyGeometry.
Véase también vertexDataPattern().
int QSGGeometry::sizeOfIndex() const
Devuelve el tamaño en bytes del tipo de índice.
Este valor es 2 cuando el tipo de índice es UnsignedShortType, o 4 cuando el tipo de índice es UnsignedIntType.
int QSGGeometry::sizeOfVertex() const
Devuelve el tamaño en bytes de un vértice.
Este valor procede de los atributos.
[static] void QSGGeometry::updateColoredRectGeometry(QSGGeometry *g, const QRectF &rect)
Actualiza la geometría g con las coordenadas en rect.
La función asume que el objeto de geometría contiene una única tira triangular de vértices QSGGeometry::ColoredPoint2D
[static] void QSGGeometry::updateRectGeometry(QSGGeometry *g, const QRectF &rect)
Actualiza la geometría g con las coordenadas en rect.
La función asume que el objeto de geometría contiene una única tira triangular de vértices QSGGeometry::Point2D
[static] void QSGGeometry::updateTexturedRectGeometry(QSGGeometry *g, const QRectF &rect, const QRectF &textureRect)
Actualiza la geometría g con las coordenadas en rect y las coordenadas de textura de textureRect.
textureRect debe estar en coordenadas normalizadas.
g se supone que es una tira triangular de cuatro vértices de tipo QSGGeometry::TexturedPoint2D.
int QSGGeometry::vertexCount() const
Devuelve el número de vértices que se pueden renderizar, o si se utilizan índices, devuelve el número de vértices a los que se puede acceder a través de índices.
Véase también setVertexCount().
void *QSGGeometry::vertexData()
Devuelve un puntero a los datos de vértice sin procesar de este objeto geométrico.
Véase también vertexDataAsPoint2D() y vertexDataAsTexturedPoint2D().
const void *QSGGeometry::vertexData() const
Devuelve un puntero a los datos de vértice sin procesar de este objeto geométrico.
Véase también vertexDataAsPoint2D() y vertexDataAsTexturedPoint2D().
QSGGeometry::ColoredPoint2D *QSGGeometry::vertexDataAsColoredPoint2D()
Función de conveniencia para acceder a los datos de vértice como una matriz mutable de QSGGeometry::ColoredPoint2D.
const QSGGeometry::ColoredPoint2D *QSGGeometry::vertexDataAsColoredPoint2D() const
Función de conveniencia para acceder a los datos de vértice como una matriz inmutable de QSGGeometry::ColoredPoint2D.
QSGGeometry::Point2D *QSGGeometry::vertexDataAsPoint2D()
Función de conveniencia para acceder a los datos de vértice como una matriz mutable de QSGGeometry::Point2D.
const QSGGeometry::Point2D *QSGGeometry::vertexDataAsPoint2D() const
Función de conveniencia para acceder a los datos de vértice como una matriz inmutable de QSGGeometry::Point2D.
QSGGeometry::TexturedPoint2D *QSGGeometry::vertexDataAsTexturedPoint2D()
Función de conveniencia para acceder a los datos de vértice como una matriz mutable de QSGGeometry::TexturedPoint2D.
const QSGGeometry::TexturedPoint2D *QSGGeometry::vertexDataAsTexturedPoint2D() const
Función de conveniencia para acceder a los datos de vértice como una matriz inmutable de QSGGeometry::TexturedPoint2D.
QSGGeometry::DataPattern QSGGeometry::vertexDataPattern() const
Devuelve el patrón de uso de los vértices de esta geometría. El patrón por defecto es AlwaysUploadPattern.
Véase también setVertexDataPattern().
© 2026 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.