Spec-Zone.ru › Qt

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

Spec-Zone.ru

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