Класс 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 хранит геометрию примитивов, отрисовываемых с помощью графика сцены. Он содержит данные вершин и, необязательно, данные индексов. Режим отрисовки геометрии задается с помощью 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::Bytes2Type |
0x1407 |
Добавлен в Qt 5.14. |
QSGGeometry::Bytes3Type |
0x1408 |
Добавлен в Qt 5.14. |
QSGGeometry::Bytes4Type |
0x1409 |
Добавлен в Qt 5.14. |
QSGGeometry::DoubleType |
0x140A |
Добавлен в Qt 5.14. |
Документация по функциям-членам
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()
Функция-утилита, возвращающая атрибуты для двумерного рисования с цветом по вершинам.
[static] const QSGGeometry::AttributeSet &QSGGeometry::defaultAttributes_Point2D()
Функция-утилита, возвращающая атрибуты для двумерного рисования сплошным цветом.
[static] const QSGGeometry::AttributeSet &QSGGeometry::defaultAttributes_TexturedPoint2D()
Функция-утилита, возвращающая атрибуты для двумерного текстурированного рисования.
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, DarwLineStrip или 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/qt-5.15/qsggeometry.html