Класс QSGMaterialRhiShader
Класс QSGMaterialRhiShader представляет собой программу шейдера, независимую от графического API. Подробнее...
| Заголовок: | #include <QSGMaterialRhiShader> |
| qmake: | QT += quick |
| С момента: | Qt 5.14 |
| Наследует: | QSGMaterialShader |
Этот класс был представлен в Qt 5.14.
Типы публичного доступа
| GraphicsPipelineState | |
| класс | RenderState |
| перечисление | Flag { UpdatesGraphicsPipelineState } |
| флаги | Flags |
Функции публичного доступа
| QSGMaterialRhiShader() | |
| QSGMaterialRhiShader::Flags | flags() const |
| void | setFlag(QSGMaterialRhiShader::Flags flags, bool on = true) |
| виртуальный bool | updateGraphicsPipelineState(QSGMaterialRhiShader::RenderState &state, QSGMaterialRhiShader::GraphicsPipelineState *ps, QSGMaterial *newMaterial, QSGMaterial *oldMaterial) |
| виртуальный void | updateSampledImage(QSGMaterialRhiShader::RenderState &state, int binding, QSGTexture **texture, QSGMaterial *newMaterial, QSGMaterial *oldMaterial) |
| виртуальный bool | updateUniformData(QSGMaterialRhiShader::RenderState &state, QSGMaterial *newMaterial, QSGMaterial *oldMaterial) |
Защищенные функции
| void | setShader(QSGMaterialRhiShader::Stage stage, const QShader &shader) |
| void | setShaderFileName(QSGMaterialRhiShader::Stage stage, const QString &filename) |
Подробное описание
QSGMaterialRhiShader — это современный кроссплатформенный аналог QSGMaterialShader. Последний по своему дизайну связан с OpenGL и GLSL, в то время как QSGMaterialRhiShader основан на QShader, контейнере для нескольких версий графического шейдера вместе с информацией о рефлексии.
Примечание: Все классы с префиксом QSG должны использоваться только в потоке рендеринга графика сцены. См. Граф сцены и рендеринг для получения дополнительной информации.
Документация по типам членов
перечисление QSGMaterialRhiShader::Flagфлаги QSGMaterialRhiShader::Flags
Значения флагов, указывающие специальные свойства материала.
| Константа | Значение | Описание |
|---|---|---|
QSGMaterialRhiShader::UpdatesGraphicsPipelineState |
0x0001 |
Установление этого флага позволяет вызывать updateGraphicsPipelineState(). |
Тип Flags — это typedef для QFlags<Flag>. Он хранит логическое ИЛИ комбинацию значений Flag.
Документация по функциям-членам
QSGMaterialRhiShader::QSGMaterialRhiShader()
Создает новый QSGMaterialRhiShader.
QSGMaterialRhiShader::Flags QSGMaterialRhiShader::flags() const
Возвращает текущие установленные флаги для этого шейдера материала.
void QSGMaterialRhiShader::setFlag(QSGMaterialRhiShader::Flags flags, bool on = true)
Устанавливает flags для этого шейдера материала, если on равно true; в противном случае сбрасывает указанные флаги.
[protected] void QSGMaterialRhiShader::setShader(QSGMaterialRhiShader::Stage stage, const QShader &shader)
Устанавливает shader для указанной stage.
[protected] void QSGMaterialRhiShader::setShaderFileName(QSGMaterialRhiShader::Stage stage, const QString &filename)
Устанавливает filename для шейдера для указанной stage.
Ожидается, что файл будет содержать сериализованный QRhiShader.
[virtual] bool QSGMaterialRhiShader::updateGraphicsPipelineState(QSGMaterialRhiShader::RenderState &state, QSGMaterialRhiShader::GraphicsPipelineState *ps, QSGMaterial *newMaterial, QSGMaterial *oldMaterial)
Эта функция вызывается графиком сцены, чтобы позволить материалу предоставить настраиваемый набор состояния графики. Набор состояний, которые могут быть настроены материалом, ограничен смешиванием и связанными настройками.
Примечание: Эта функция вызывается только в том случае, если флаг UpdatesGraphicsPipelineState был включен с помощью setFlags(). По умолчанию он не установлен, и поэтому эта функция никогда не вызывается.
Возвращаемое значение должно быть true всякий раз, когда были внесены изменения в любой из членов в ps.
Примечание: Содержание ps не сохраняется между вызовами этой функции.
Текущее состояние рендеринга state передается из графика сцены.
Состояние, специфичное для подкласса, может быть извлечено из newMaterial. Когда oldMaterial равно null, этот шейдер только что был активирован.
[virtual] void QSGMaterialRhiShader::updateSampledImage(QSGMaterialRhiShader::RenderState &state, int binding, QSGTexture **texture, QSGMaterial *newMaterial, QSGMaterial *oldMaterial)
Эта функция вызывается графиком сцены для подготовки использования образцового изображения в шейдере, обычно в виде комбинированного образцового рендера.
binding — это номер привязки рендера. Функция вызывается для каждой переменной в шейдерах материала QShaderDescription::combinedImageSamplers().
Когда *texture равно null, необходимо установить его в указатель на QSGTexture перед возвратом. Когда оно не равно null, материал должен принять решение о том, будет ли новый QSGTexture * сохранен в нём, или он обновит некоторые параметры уже известного QSGTexture. Владение QSGTexture не передаётся.
Текущее состояние рендеринга state передаётся из графика сцены. Материал должен поставить в очередь загрузки данных текстуры в QRhiResourceUpdateBatch, доступный через RenderState::resourceUpdateBatch().
Состояние, специфичное для подкласса, может быть извлечено из newMaterial.
oldMaterial может использоваться для минимизации изменений. Когда oldMaterial равно null, этот шейдер только что был активирован.
[virtual] bool QSGMaterialRhiShader::updateUniformData(QSGMaterialRhiShader::RenderState &state, QSGMaterial *newMaterial, QSGMaterial *oldMaterial)
Эта функция вызывается графиком сцены для обновления содержимого буфера униформ программы шейдера. Реализация не должна выполнять какие-либо реальные графические операции, она только отвечает за копирование данных в QByteArray, возвращаемый из RenderState::uniformData(). График сцены позаботится о том, чтобы этот буфер был виден в шейдерах.
Текущее состояние рендеринга state передаётся от графика сцены. Если состояние указывает, что любое релевантное состояние изменено, реализация должна обновить соответствующий регион в данных буфера, доступных через RenderState::uniformData(). Когда состояние, например, матрица или непрозрачность, не изменено, нет необходимости трогать соответствующий регион, так как данные сохраняются.
Значение возврата должно быть true всякий раз, когда были внесены изменения в унифицированные данные.
Состояние, специфичное для подкласса, такое как цвет плоского материала, должно быть извлечено из newMaterial для соответствующего обновления соответствующих областей в буфере.
oldMaterial можно использовать для минимизации изменений в буфере (которые обычно являются вызовами memcpy) при обновлении состояния материала. Когда oldMaterial равно null, этот шейдер только что был активирован.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.14/qsgmaterialrhishader.html