Класс QSGMaterial
Класс QSGMaterial инкапсулирует состояние отрисовки для программы шейдеров. Подробнее...
| Заголовок: | #include <QSGMaterial> |
| CMake: | find_package(Qt6 COMPONENTS Quick REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Quick) |
| qmake: | QT += quick |
| Наследуется от: | QSGFlatColorMaterial, QSGOpaqueTextureMaterial и QSGVertexColorMaterial |
Типы публичного доступа
| Перечисление | Flag { Blending, RequiresDeterminant, RequiresFullMatrixExceptTranslate, RequiresFullMatrix, CustomCompileStep } |
| Флаги | Flags |
Функции публичного доступа
| виртуальный int | compare(const QSGMaterial *other) const |
| виртуальный QSGMaterialShader * | createShader(QSGRendererInterface::RenderMode renderMode) const = 0 |
| QSGMaterial::Flags | flags() const |
| void | setFlag(QSGMaterial::Flags flags, bool on = true) |
| виртуальный QSGMaterialType * | type() const = 0 |
Подробное описание
Классы QSGMaterial и QSGMaterialShader образуют тесную связь. Для одной сцены (включая вложенные графики) существует один уникальный экземпляр QSGMaterialShader, который инкапсулирует шейдеры, используемые графикой сцены для отрисовки материала, например, шейдер для плоского цветового заполнения геометрии. Каждый QSGGeometryNode может иметь уникальный QSGMaterial, содержащий информацию о том, как должен настраиваться шейдер при отрисовке узла, например, фактический цвет, используемый для отрисовки геометрии.
QSGMaterial имеет две виртуальные функции, которые необходимо реализовать. Функция type() должна возвращать уникальный экземпляр для всех экземпляров конкретного подкласса. Функция createShader() должна возвращать новый экземпляр QSGMaterialShader, специфичный для этого подкласса QSGMaterial.
Минимальная реализация QSGMaterial может выглядеть так:
class Material : public QSGMaterial
{
public:
QSGMaterialType *type() const override { static QSGMaterialType type; return &type; }
QSGMaterialShader *createShader(QSGRendererInterface::RenderMode) const override { return new Shader; }
}; См. пример Настройка материала для ознакомления с реализацией подкласса QQuickItem, поддерживаемого QSGGeometryNode и настраиваемым материалом.
Примечание: createShader() вызывается только один раз на каждый QSGMaterialType, чтобы сократить избыточную работу с подготовкой шейдеров. Если QSGMaterial поддерживается несколькими наборами сочетаний вершинного и фрагментного шейдеров, реализация type() должна возвращать указатель на другой, уникальный QSGMaterialType для каждого сочетания шейдеров.
Примечание: Все классы с префиксом QSG должны использоваться только в потоке отрисовки графика сцены. См. График сцены и отрисовка для получения дополнительной информации.
См. также QSGMaterialShader, График сцены — Настройка материала, График сцены — Два поставщика текстур и График сцены — Граф.
Документация по типам членов
Перечисление QSGMaterial::FlagФлаги QSGMaterial::Flags
| Константа | Значение | Описание |
|---|---|---|
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(), когда его программа шейдеров скомпилирована и связана. Установите этот флаг для принудительного вызова этой функции. |
Тип Flags является псевдонимом для QFlags<Flag>. Он хранит комбинацию значений Flag с использованием операции OR.
Документация по функциям-членам
[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(QSGRendererInterface::RenderMode renderMode) const
Эта функция возвращает новый экземпляр реализации QSGMaterialShader, используемой для отрисовки геометрии для конкретной реализации QSGMaterial.
Функция вызывается только один раз для каждой комбинации типа материала и renderMode и кешируется внутри.
Для большинства материалов renderMode можно игнорировать. Некоторым материалам может потребоваться специальная обработка для определенных режимов отрисовки. Например, если материал реализует сглаживание таким образом, что ему необходимо учитывать преобразования перспективы при использовании RenderMode3D.
QSGMaterial::Flags QSGMaterial::flags() const
Возвращает флаги материала.
void QSGMaterial::setFlag(QSGMaterial::Flags flags, bool on = true)
Устанавливает флаги flags для этого материала, если on равно true; в противном случае очищает атрибут.
[pure virtual] QSGMaterialType *QSGMaterial::type() const
Эта функция вызывается графиком сцены для запроса идентификатора, который уникален для QSGMaterialShader, созданного функцией createShader().
Для многих материалов типичным подходом будет возврат указателя на статический, а следовательно, глобально доступный экземпляр QSGMaterialType. QSGMaterialType — это неявный объект. Его цель — только предоставить безопасный с точки зрения типов и простой способ создания уникальных идентификаторов материалов.
QSGMaterialType *type() const override
{
static QSGMaterialType type;
return &type;
}
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.1/qsgmaterial.html