En esta página

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.

ConstanteValorDescripción
QSGGeometry::UnknownAttribute0No importa
QSGGeometry::PositionAttribute1Posición
QSGGeometry::ColorAttribute2Color
QSGGeometry::TexCoordAttribute3Coordenada de textura
QSGGeometry::TexCoord1Attribute4Coordenada de textura 1
QSGGeometry::TexCoord2Attribute5Coordenada 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.

ConstanteValorDescripción
QSGGeometry::AlwaysUploadPattern0Los 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::DynamicPattern2Los 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::StaticPattern3Los 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::StreamPattern1Los 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.

ConstanteValor
QSGGeometry::DrawPoints0x0000
QSGGeometry::DrawLines0x0001
QSGGeometry::DrawLineStrip0x0003
QSGGeometry::DrawTriangles0x0004
QSGGeometry::DrawTriangleStrip0x0005

enum QSGGeometry::Type

Especifica el tipo de componente en los datos de vértice.

ConstanteValorDescripción
QSGGeometry::ByteType0x1400
QSGGeometry::UnsignedByteType0x1401
QSGGeometry::ShortType0x1402
QSGGeometry::UnsignedShortType0x1403
QSGGeometry::IntType0x1404
QSGGeometry::UnsignedIntType0x1405
QSGGeometry::FloatType0x1406
QSGGeometry::Bytes2Type0x1407Añadido en Qt 5.14.
QSGGeometry::Bytes3Type0x1408Añadido en Qt 5.14.
QSGGeometry::Bytes4Type0x1409Añadido en Qt 5.14.
QSGGeometry::DoubleType0x140AAñ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.