Класс QSGMaterial
Класс QSGMaterial инкапсулирует состояние отрисовки для программы шейдеров. Подробнее...
| Заголовок: | #include <QSGMaterial> |
| qmake: | QT += quick |
| Наследуется от: | QSGFlatColorMaterial, QSGOpaqueTextureMaterial, QSGSimpleMaterial и QSGVertexColorMaterial |
Открытые типы
| Перечисление | Флаг { Смешивание, ТребуетОпределитель, ТребуетПолнуюМатрицуКромеПеревода, ТребуетПолнуюМатрицу, ПользовательскийШагКомпиляции } |
| флаги | Флаги |
Открытые функции
| виртуальный int | compare(const QSGMaterial *other) const |
| виртуальный QSGMaterialShader * | createShader() const = 0 |
| QSGMaterial::Флаги | flags() const |
| void | setFlag(QSGMaterial::Флаги flags, bool on = true) |
| виртуальный QSGMaterialType * | type() const = 0 |
Подробное описание
API QSGMaterial очень низкого уровня. Более удобный API, который предоставляет почти все те же функции, доступен через QSGSimpleMaterialShader.
Подклассы QSGMaterial и QSGMaterialShader образуют тесную связь. Для одной сцены графика (включая вложенные графики) существует один уникальный экземпляр QSGMaterialShader, который инкапсулирует QOpenGLShaderProgram, используемый графиком сцены для отрисовки данного материала, например, шейдер для плоского заполнения геометрии. Каждый QSGGeometryNode может иметь уникальный QSGMaterial, содержащий информацию о том, как должен быть настроен шейдер при рисовании данного узла, например, фактический цвет для отрисовки геометрии.
У QSGMaterial есть две виртуальные функции, которые необходимо реализовать. Функция type() должна возвращать уникальный экземпляр для всех экземпляров определенного подкласса. Функция createShader() должна возвращать новый экземпляр QSGMaterialShader, специфичный для подкласса QSGMaterial.
Пример минимальной реализации QSGMaterial:
class Material : public QSGMaterial
{
public:
QSGMaterialType *type() const { static QSGMaterialType type; return &type; }
QSGMaterialShader *createShader() const { return new Shader; }
}; Примечание: Все классы с префиксом QSG должны использоваться только в потоке отрисовки сцены графика. См. График сцены и отрисовка для получения дополнительной информации.
Документация по типам членов
Перечисление QSGMaterial::ФлагФлаги QSGMaterial::Флаги
| Константа | Значение | Описание |
|---|---|---|
QSGMaterial::Blending |
0x0001 |
Установите этот флаг в значение true, если материал требует включения GL_BLEND при отрисовке. |
QSGMaterial::RequiresDeterminant |
0x0002 |
Установите этот флаг в значение true, если материал зависит от определителя матрицы узлов геометрии для отрисовки. |
QSGMaterial::RequiresFullMatrixExceptTranslate |
0x0004 | RequiresDeterminant |
Установите этот флаг в значение true, если материал зависит от полной матрицы узлов геометрии для отрисовки, за исключением части трансляции. |
QSGMaterial::RequiresFullMatrix |
0x0008 | RequiresFullMatrixExceptTranslate |
Установите этот флаг в значение true, если материал зависит от полной матрицы узлов геометрии для отрисовки. |
QSGMaterial::CustomCompileStep |
0x0010 |
Начиная с Qt 5.2, график сцены не всегда будет вызывать QSGMaterialShader::compile() при компиляции и линковке программы шейдеров. Установите этот флаг для принудительного вызова функции. |
Тип Флаги является типом-синонимом для QFlags<Флаг>. Он хранит логическое ИЛИ сочетание значений Флаг.
Документация по функциям-членам
[virtual] int QSGMaterial::compare(const QSGMaterial *other) const
Сравнивает этот материал с other и возвращает 0, если они равны; -1, если этот материал должен быть отсортирован раньше other, и 1, если other должен быть отсортирован раньше.
График сцены может переупорядочивать узлы геометрии, чтобы свести к минимуму изменения состояния. Функция compare вызывается во время процесса сортировки, чтобы материалы можно было отсортировать, сводя к минимуму изменения состояния в каждом вызове QSGMaterialShader::updateState().
Указатель this и other гарантированно имеют одинаковый тип type().
[pure virtual] QSGMaterialShader *QSGMaterial::createShader() const
Эта функция возвращает новый экземпляр реализации QSGMaterialShader, используемой для отрисовки геометрии для конкретной реализации QSGMaterial.
Функция будет вызываться только один раз для каждого типа материала, который существует в графике сцены, и будет кэшироваться внутри.
QSGMaterial::Флаги QSGMaterial::flags() const
Возвращает флаги материала.
void QSGMaterial::setFlag(QSGMaterial::Флаги flags, bool on = true)
Устанавливает флаги flags для этого материала, если on равно true; в противном случае очищает атрибут.
[pure virtual] QSGMaterialType *QSGMaterial::type() const
Эта функция вызывается графиком сцены для возвращения уникального экземпляра для каждого подкласса.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.13/qsgmaterial.html