Spec-Zone.ru › Qt 5.11

Класс QSGGeometry

Класс QSGGeometry предоставляет низкоуровневое хранилище для графических примитивов в Qt Quick Scene Graph. Подробнее...

Заголовок: #include <QSGGeometry>
qmake: QT += quick
  • Список всех членов, включая унаследованные

Открытые типы

класс Атрибут
класс Набор атрибутов
класс Цветная точка 2D
класс Точка 2D
класс Текстурированная точка 2D
перечисление Тип атрибута { НеизвестныйАтрибут, АтрибутПозиции, АтрибутЦвета, АтрибутТекстурныхКоординат, АтрибутТекстурныхКоординат1, АтрибутТекстурныхКоординат2 }
перечисление Образец данных { ОбразецВсегдаЗагружать, ОбразецДинамический, ОбразецСтатический, ОбразецПоток }
перечисление Режим отрисовки { РисоватьТочки, РисоватьЛинии, РисоватьКонтурЛинии, РисоватьЛиниюЛоманую, ..., РисоватьТреугольникВенчик }
перечисление Тип { ТипБайт, ТипБезЗнаковыхБайт, ТипКороткий, ТипБезЗнаковыхКороткий, ..., ТипВещественный }

Открытые функции

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

Статические публичные члены

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)

Подробное описание

Класс QSGGeometry предоставляет низкоуровневое хранилище для графических примитивов в Qt Quick Scene Graph.

Класс QSGGeometry хранит геометрию примитивов, отрисовываемых с помощью графического узла сцены. Он содержит данные вершин и, необязательно, данные индексов. Режим, используемый для отрисовки геометрии, задается с помощью setDrawingMode(), который напрямую соответствует режиму отрисовки графического API, например, GL_TRIANGLE_STRIP, GL_TRIANGLES, или GL_POINTS в случае OpenGL.

Вершины могут быть простыми, например, точками, определёнными значениями x и y, или более сложными, где каждая вершина содержит нормаль, координаты текстуры и 3D-позицию. Для описания построения данных вершин используется QSGGeometry::AttributeSet. Настройка атрибутов может быть указана только при создании. Класс QSGGeometry предоставляет несколько удобных атрибутов и наборов атрибутов по умолчанию. Функция defaultAttributes_Point2D() возвращает набор атрибутов, используемых в обычных прямоугольниках сплошного цвета, а функция defaultAttributes_TexturedPoint2D() возвращает атрибуты для использования с текстурированной 2D-геометрией. Данные вершин хранятся внутри как void *, и к ним можно получить доступ с помощью функции vertexData(). Удобные методы доступа для общих наборов атрибутов доступны с помощью vertexDataAsPoint2D() и vertexDataAsTexturedPoint2D(). Данные вершин выделяются путём передачи количества вершин в конструктор или вызова allocate() позднее.

Объект QSGGeometry может необязательно содержать индексы целых чисел без знака 32-битного, 16-битного или 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, GL_FLOAT, true),
    QSGGeometry::Attribute::create(1, 4, GL_FLOAT, false)
};

QSGGeometry::AttributeSet MyPoint2D_AttributeSet = {
    2,
    sizeof(MyPoint2D),
    MyPoint2D_Attributes
};

...

geometry = new QSGGeometry(MyPoint2D_AttributeSet, 2);
geometry->setDrawingMode(GL_LINES);

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 представляет собой программный буфер и клиентский компонент с точки зрения рендеринга OpenGL, поскольку буферы, используемые в 2D-графике, обычно состоят из множества небольших буферов, которые изменяются каждый кадр и не выигрывают от загрузки в графическую память. Однако QSGGeometry поддерживает подсказки для рендерера о том, что буфер должен загружаться с помощью функций setVertexDataPattern() и setIndexDataPattern(). Будет ли учтена эта подсказка или нет, зависит от реализации.

Примечание: Все классы с префиксом QSG должны использоваться только в потоке рендеринга графа сцены. Дополнительную информацию см. в разделе Граф сцены и рендеринг.

См. также QSGGeometryNode и Граф сцены — настройка геометрии.

Документация по типам членов

enum QSGGeometry::AttributeType

Этот перечисление определяет несколько типов атрибутов.

Постоянная Значение Описание
QSGGeometry::UnknownAttribute 0 Безразлично
QSGGeometry::PositionAttribute 1 Позиция
QSGGeometry::ColorAttribute 2 Цвет
QSGGeometry::TexCoordAttribute 3 Координаты текстуры
QSGGeometry::TexCoord1Attribute 4 Координата текстуры 1
QSGGeometry::TexCoord2Attribute 5 Координата текстуры 2

enum QSGGeometry::DataPattern

Перечисление DataPattern используется для указания шаблона использования данных вершин и индексов в объекте геометрии.

Постоянная Значение Описание
QSGGeometry::AlwaysUploadPattern 0 Данные всегда загружаются. Это означает, что пользователю не нужно явно отмечать данные индексов и вершин как изменённые после их изменения. Это значение по умолчанию.
QSGGeometry::DynamicPattern 2 Данные многократно изменяются и отображаются многократно. Это подсказка, которая может улучшить производительность. При установке этого значения пользователь должен убедиться, что данные отмечаются как изменённые после их изменения.
QSGGeometry::StaticPattern 3 Данные изменяются один раз и отображаются многократно. Это подсказка, которая может улучшить производительность. При установке этого значения пользователь должен убедиться, что данные отмечаются как изменённые после их изменения.
QSGGeometry::StreamPattern 1 Данные изменяются практически каждый раз при отображении. Это подсказка, которая может улучшить производительность. При установке этого значения пользователь должен убедиться, что данные отмечаются как изменённые после их изменения.

enum QSGGeometry::DrawingMode

Значения соответствуют значениям перечислений OpenGL, таким как GL_POINTS, GL_LINES, и т. д. QSGGeometry предоставляет свой собственный тип, чтобы обеспечить одинаковый API с бэкендами, не связанными с OpenGL.

Постоянная Значение
QSGGeometry::DrawPoints 0x0000
QSGGeometry::DrawLines 0x0001
QSGGeometry::DrawLineLoop 0x0002
QSGGeometry::DrawLineStrip 0x0003
QSGGeometry::DrawTriangles 0x0004
QSGGeometry::DrawTriangleStrip 0x0005
QSGGeometry::DrawTriangleFan 0x0006

enum QSGGeometry::Type

Значения соответствуют константам типов OpenGL, таким как GL_BYTE, GL_UNSIGNED_BYTE, и т. д. QSGGeometry предоставляет свой собственный тип, чтобы обеспечить одинаковый API с бэкендами, не связанными с OpenGL.

Постоянная Значение
QSGGeometry::ByteType 0x1400
QSGGeometry::UnsignedByteType 0x1401
QSGGeometry::ShortType 0x1402
QSGGeometry::UnsignedShortType 0x1403
QSGGeometry::IntType 0x1404
QSGGeometry::UnsignedIntType 0x1405
QSGGeometry::FloatType 0x1406

Документация по функциям-членам

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

Создаёт объект геометрии на основе attributes.

Объект выделяет память для vertexCount вершин на основе накопленного размера в attributes и для indexCount индексов.

indexType сопоставляется с типом индекса OpenGL и может быть GL_UNSIGNED_SHORT и GL_UNSIGNED_BYTE. В реализациях OpenGL, которые это поддерживают, таких как настольные OpenGL, также можно использовать GL_UNSIGNED_INT.

Объекты геометрии создаются с GL_TRIANGLE_STRIP в качестве режима отображения по умолчанию.

Структура атрибутов предполагается как POD, и объект геометрии предполагает, что она не исчезнет. Управление памятью не используется.

[virtual] 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().

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

Функция удобства, которая возвращает атрибуты, используемые для 2D-рендеринга с цветом каждой вершины.

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

Функция удобства, которая возвращает атрибуты, используемые для 2D-рендеринга сплошным цветом.

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

Функция удобства, которая возвращает атрибуты, используемые для 2D-рендеринга с текстурой.

unsigned int QSGGeometry::drawingMode() const

Возвращает режим отрисовки этой геометрии.

Значение по умолчанию — GL_TRIANGLE_STRIP.

См. также 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

Получает текущую ширину линии или точки, используемую для этой геометрии. Это свойство применяется только к ширине линии, когда режим отрисовки drawingMode — DrawLines, DrawLineStrip или DrawLineLoop. Для настольного OpenGL оно также применяется к размеру точки, когда режим отрисовки drawingMode — DrawPoints.

Значение по умолчанию — 1.0.

Примечание: Если используется не OpenGL, поддержка рисования точек и линий может быть ограничена. Например, некоторые API не поддерживают point sprites, поэтому установка размера, отличного от 1, невозможна. Некоторые бэкэнды могут реализовать поддержку с помощью шейдеров геометрии, но это не гарантируется.

См. также setLineWidth() и drawingMode().

void QSGGeometry::markIndexDataDirty()

Отметить вершины этой геометрии как изменённые, чтобы они были загружены заново.

Эта функция эффективна только при использовании схемы использования вершин StaticData и когда рендерер, рисующий эту геометрию, загружает геометрию в VBO (Vertex Buffer Objects).

void QSGGeometry::markVertexDataDirty()

Отметить вершины этой геометрии как изменённые, чтобы они были загружены заново.

Эта функция эффективна только при использовании схемы использования вершин StaticData и когда рендерер, рисующий эту геометрию, загружает геометрию в VBO (Vertex Buffer Objects).

void QSGGeometry::setDrawingMode(unsigned int mode)

Устанавливает mode, используемый для отрисовки этой геометрии.

Значение по умолчанию — QSGGeometry::DrawTriangleStrip.

См. также drawingMode() и DrawingMode.

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

Устанавливает схему использования индексов на p.

По умолчанию используется AlwaysUploadPattern. При установке значения, отличного от значения по умолчанию, необходимо вызвать markIndexDataDirty() после изменения данных индексов, а также вызвать QSGNode::markDirty() со значением QSGNode::DirtyGeometry.

См. также indexDataPattern().

void QSGGeometry::setLineWidth(float width)

Устанавливает ширину линии или точки для этой геометрии на width. Это свойство применяется только к ширине линии, когда режим отрисовки drawingMode — DrawLines, DrawLineStrip или DrawLineLoop. Для настольного OpenGL оно также применяется к размеру точки, когда режим отрисовки drawingMode — DrawPoints.

Примечание: Как обрабатываются ширина линии и размер точки зависит от реализации: приложение не должно полагаться на эти значения, а вместо этого должно создавать треугольники или подобные фигуры для отрисовки областей. В OpenGL ES поддержка ширины линии ограничена, а размер точки не поддерживается.

См. также lineWidth() и drawingMode().

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

Устанавливает схему использования вершин на p.

По умолчанию используется AlwaysUploadPattern. При установке значения, отличного от значения по умолчанию, необходимо вызвать markVertexDataDirty() после изменения данных вершин, а также вызвать QSGNode::markDirty() со значением QSGNode::DirtyGeometry.

См. также vertexDataPattern().

int QSGGeometry::sizeOfIndex() const

Возвращает размер типа индекса в байтах.

Это значение равно 1 для типа индекса GL_UNSIGNED_BYTE или 2 для типа индекса GL_UNSIGNED_SHORT. Для настольного OpenGL также поддерживается значение GL_UNSIGNED_INT со значением 4.

int QSGGeometry::sizeOfVertex() const

Возвращает размер одной вершины в байтах.

Это значение взято из атрибутов.

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

Обновляет геометрию g координатами из rect.

Функция предполагает, что объект геометрии содержит одну полосу треугольников из вершин типа QSGGeometry::ColoredPoint2D.

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

Обновляет геометрию g координатами из rect.

Функция предполагает, что объект геометрии содержит одну полосу треугольников из вершин типа QSGGeometry::Point2D.

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

Обновляет геометрию g координатами из rect и координатами текстуры из textureRect.

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().

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.11/qsggeometry.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API