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