Класс 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.
Документация по функциям членов
[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.2/qsgmaterial.html