Spec-Zone.ru › Qt 5.15

Класс QSGMaterial

Класс QSGMaterial инкапсулирует состояние отрисовки для программы шейдеров. Подробнее...

Заголовок: #include <QSGMaterial>
qmake: QT += quick
Наследуется от:

QSGFlatColorMaterial, QSGOpaqueTextureMaterial, QSGSimpleMaterial и QSGVertexColorMaterial

  • Список всех членов, включая унаследованные

Открытые типы

Перечисление Flag { Смешивание, ТребуетсяДетерминант, ТребуетсяПолнаяМатрицаИсключаяПеренос, ТребуетсяПолнаяМатрица, ПользовательскийШагКомпиляции, …, RhiShaderWanted }
флаги Flags

Открытые функции

виртуальный int compare(const QSGMaterial *other) const
виртуальный QSGMaterialShader * createShader() const = 0
QSGMaterial::Flags flags() const
void setFlag(QSGMaterial::Flags flags, bool on = true)
виртуальный QSGMaterialType * type() const = 0

Подробное описание

Классы QSGMaterial, QSGMaterialShader и QSGMaterialRhiShader образуют тесную взаимосвязь. Для одной сцены графика (включая вложенные графики) существует единственный экземпляр QSGMaterialShader или QSGMaterialRhiShader, который инкапсулирует шейдеры, используемые графикой сцены для отрисовки данного материала, например, шейдер для плоского заполнения геометрии. Каждый QSGGeometryNode может иметь уникальный QSGMaterial, содержащий информацию о том, как должен настраиваться шейдер при отрисовке этого узла, например, фактический цвет, используемый для отрисовки геометрии.

QSGMaterial имеет две виртуальные функции, которые необходимо реализовать. Функция type() должна возвращать уникальный экземпляр для всех экземпляров конкретного подкласса. Функция createShader() должна возвращать новый экземпляр QSGMaterialShader или QSGMaterialRhiShader, специфичный для этого подкласса QSGMaterial.

Минимальная реализация QSGMaterial может выглядеть так:

class Material : public QSGMaterial
{
public:
    QSGMaterialType *type() const { static QSGMaterialType type; return &type; }
    QSGMaterialShader *createShader() const { return new Shader; }
};

Это подходит только для OpenGL-основанного традиционного рендерера сцены. При использовании нового рендерера, абстрагированного от графического API, материалы должны создавать экземпляры QSGMaterialRhiShader вместо или дополнительно к ним:

class Material : public QSGMaterial
{
public:
    Material() { setFlag(SupportsRhiShader, true); }
    QSGMaterialType *type() const { static QSGMaterialType type; return &type; }
    QSGMaterialShader *createShader() {
        if (flags().testFlag(RhiShaderWanted)) {
            return new RhiShader;
        } else {
            // this is optional, relevant for materials that intend to be usable with the legacy OpenGL renderer as well
            return new Shader;
        }
    }
};

Примечание: Все классы с префиксом QSG должны использоваться исключительно в потоке отрисовки сцены. См. Графика сцены и отрисовка для получения дополнительной информации.

Документация по типам членов

Перечисление 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() при компиляции и компоновке программы шейдеров. Установите этот флаг, чтобы принудительно вызвать эту функцию.
QSGMaterial::SupportsRhiShader 0x0020 Начиная с Qt 5.14, графика сцены поддерживает QSGMaterialRhiShader в качестве альтернативы OpenGL-специфическому QSGMaterialShader. Установите этот флаг, чтобы указать, что createShader() может возвращать экземпляры QSGMaterialRhiShader, когда установлен флаг RhiShaderWanted.
QSGMaterial::RhiShaderWanted 0x1000 Этот флаг устанавливается графикой сцены, а не классом QSGMaterial. Когда он установлен, и это может произойти только при установке флага SupportsRhiShader материалом, он указывает, что createShader() должен возвращать экземпляр QSGMaterialRhiShader вместо QSGMaterialShader.

Тип 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() const

Эта функция возвращает новый экземпляр реализации QSGMaterialShader, используемой для отрисовки геометрии для конкретной реализации QSGMaterial.

Функция будет вызвана только один раз для каждого типа материала, который существует в графике сцены, и будет кэшироваться внутри.

Когда QSGMaterial сообщает о SupportsRhiShader в flags(), графика сцены может запросить QSGMaterialRhiShader вместо QSGMaterialShader. Это обозначается установкой флага RhiShaderWanted. В этом случае возвращаемое значение должно быть подклассом QSGRhiMaterialShader.

QSGMaterial::Flags QSGMaterial::flags() const

Возвращает флаги материала.

void QSGMaterial::setFlag(QSGMaterial::Flags 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.15/qsgmaterial.html

Spec-Zone.ru

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