Spec-Zone.ru › Qt 6.1

Класс 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

Spec-Zone.ru

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