Класс QBufferDataGenerator
(Qt3DRender::QBufferDataGenerator)Предоставляет механизм генерации данных буфера из задания. Подробнее...
| Заголовок: | #include <QBufferDataGenerator> |
| qmake: | QT += 3drender |
| Наследует: | Qt3DRender::QAbstractFunctor |
Открытые функции
| виртуальный | ~QBufferDataGenerator() |
| виртуальный QByteArray | operator()() = 0 |
| виртуальный bool | operator==(const QBufferDataGenerator &other) const = 0 |
- 2 открытые функции унаследованы от Qt3DRender::QAbstractFunctor
Подробное описание
Предоставляет механизм генерации данных буфера из задания.
Класс Qt3DRender::QBufferDataGenerator должен быть подклассом, чтобы предоставить способ заполнения данных Qt3DRender::QBuffer. Такие функторы выполняются во время выполнения в задании Qt 3D (вероятно, параллельно с многими другими заданиями). При предоставлении функтора необходимо реализовать operator(), который будет вызываться для генерации фактических данных. Необходимо убедиться, что сохранены копии всего, что может потребоваться для его правильной работы. Также необходимо реализовать оператор operator==. Он будет использоваться для сравнения с другими функторами, и на основе этого рендерер сможет решить, следует ли выполнять новый функтор.
Примечание: функторы полезны, когда можно построить данные из нескольких наборов атрибутов (например, построение сферы из свойства радиуса). Если у вас уже есть доступ к данным буфера, использование Qt3DRender::QBuffer::setData() скорее всего будет более эффективным.
QByteArray createSphereMeshVertexData(float radius, int rings, int slices)
{
...
}
class SphereVertexDataFunctor : public QBufferDataGenerator
{
public:
SphereVertexDataFunctor(int rings, int slices, float radius)
: m_rings(rings)
, m_slices(slices)
, m_radius(radius)
{}
QByteArray operator ()() Q_DECL_OVERRIDE
{
return createSphereMeshVertexData(m_radius, m_rings, m_slices);
}
bool operator ==(const QBufferDataGenerator &other) const Q_DECL_OVERRIDE
{
const SphereVertexDataFunctor *otherFunctor = functor_cast<SphereVertexDataFunctor>(&other);
if (otherFunctor != nullptr)
return (otherFunctor->m_rings == m_rings &&
otherFunctor->m_slices == m_slices &&
otherFunctor->m_radius == m_radius);
return false;
}
QT3D_FUNCTOR(SphereVertexDataFunctor)
private:
int m_rings;
int m_slices;
float m_radius;
}; Макрос QT3D_FUNCTOR должен быть добавлен при создании подкласса. Это позволяет использовать functor_cast в операторе сравнения, чтобы убедиться, что другой функтор является того же типа, что и тот, с которым вы пытаетесь сравнить.
Документация по членам-функциям
[virtual] QBufferDataGenerator::~QBufferDataGenerator()
Уничтожает экземпляр QBufferDataGenerator. Деструктор является виртуальным.
[pure virtual] QByteArray QBufferDataGenerator::operator()()
Должен быть реализован для возвращения данных буфера в виде QByteArray при вызове.
[pure virtual] bool QBufferDataGenerator::operator==(const QBufferDataGenerator &other) const
Должен быть переопределён для возврата true, когда два генератора (тот, с которым вы сравниваете, и генератор other) идентичны, иначе false.
Примечание: рендерер использует это сравнение, чтобы определить, нужно ли повторно загружать данные для буфера, когда меняется функтор в Qt3DRender::QBuffer.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.9/qt3drender-qbufferdatagenerator.html