Spec-Zone.ru › Qt 5.9

Класс QSGGeometry

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

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

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

класс Атрибут
класс Набор атрибутов
класс ColoredPoint2D
класс Point2D
класс TexturedPoint2D
перечисление ТипАтрибута { НеизвестныйАтрибут, АтрибутПозиции, АтрибутЦвета, АтрибутТекстурныхКоординат, АтрибутТекстурныхКоординат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 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
DataPattern indexDataPattern() const
int indexType() const
float lineWidth() const
void markIndexDataDirty()
void markVertexDataDirty()
void setDrawingMode(unsigned int mode)
void setIndexDataPattern(DataPattern p)
void setLineWidth(float width)
void setVertexDataPattern(DataPattern p)
int sizeOfIndex() const
int sizeOfVertex() const
int vertexCount() const
void * vertexData()
const void * vertexData() const
ColoredPoint2D * vertexDataAsColoredPoint2D()
const ColoredPoint2D * vertexDataAsColoredPoint2D() const
Point2D * vertexDataAsPoint2D()
const Point2D * vertexDataAsPoint2D() const
TexturedPoint2D * vertexDataAsTexturedPoint2D()
const TexturedPoint2D * vertexDataAsTexturedPoint2D() const
DataPattern vertexDataPattern() const

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

const AttributeSet & defaultAttributes_ColoredPoint2D()
const AttributeSet & defaultAttributes_Point2D()
const 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

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 Attribute *QSGGeometry::attributes() const

Возвращает массив с атрибутами этой геометрии. Размер массива задается с помощью attributeCount().

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

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

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

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

[static] const 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-битных беззнаковых целых чисел.

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 не поддерживают точки-сприты, поэтому установка размера, отличного от 1, невозможна. Некоторые бэкэнды могут реализовать поддержку с помощью шейдеров геометрии, но это не гарантируется.

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

void QSGGeometry::markIndexDataDirty()

Помечает данные вершин в этой геометрии как измененные и требующие повторной загрузки.

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

void QSGGeometry::markVertexDataDirty()

Помечает данные вершин в этой геометрии как измененные и требующие повторной загрузки.

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

void QSGGeometry::setDrawingMode(unsigned int mode)

Устанавливает mode для отображения этой геометрии.

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

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

void QSGGeometry::setIndexDataPattern(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(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().

ColoredPoint2D *QSGGeometry::vertexDataAsColoredPoint2D()

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

const ColoredPoint2D *QSGGeometry::vertexDataAsColoredPoint2D() const

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

Point2D *QSGGeometry::vertexDataAsPoint2D()

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

const Point2D *QSGGeometry::vertexDataAsPoint2D() const

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

TexturedPoint2D *QSGGeometry::vertexDataAsTexturedPoint2D()

Функция для удобного доступа к данным вершин как к изменяемому массиву QSGGeometry::TexturedPoint2D.

const TexturedPoint2D *QSGGeometry::vertexDataAsTexturedPoint2D() const

Функция для удобного доступа к данным вершин как к неизменяемому массиву QSGGeometry::TexturedPoint2D.

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.9/qsggeometry.html

Spec-Zone.ru

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