Spec-Zone.ru › Qt 5.14

Класс QSGMaterial

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

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

QSGFlatColorMaterial, QSGOpaqueTextureMaterial, QSGSimpleMaterial и QSGVertexColorMaterial

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

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

перечисление Flag { Смешивание, ТребуетсяОпределитель, ТребуетсяПолнаяМатрицаБезПеревода, ТребуетсяПолнаяМатрица, ПользовательскийШагКомпиляции, ..., НеобходимШейдерRHI }
флаги 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.14/qsgmaterial.html

Spec-Zone.ru

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