Класс QSGMaterialRhiShader
Класс QSGMaterialRhiShader представляет собой программу шейдера, независимую от графического API. Подробнее...
| Заголовок: | #include <QSGMaterialRhiShader> |
| qmake: | QT += quick |
| С тех пор: | Qt 5.14 |
| Наследуется от: | QSGMaterialShader |
Этот класс был представлен в Qt 5.14.
Типы public
| Структура | GraphicsPipelineState |
| Класс | RenderState |
| Перечисление | Flag { UpdatesGraphicsPipelineState } |
| Флаги | Flags |
Функции public
| QSGMaterialRhiShader() | |
| QSGMaterialRhiShader::Flags | flags() const |
| void | setFlag(QSGMaterialRhiShader::Flags flags, bool on = true) |
| virtual bool | updateGraphicsPipelineState(QSGMaterialRhiShader::RenderState &state, QSGMaterialRhiShader::GraphicsPipelineState *ps, QSGMaterial *newMaterial, QSGMaterial *oldMaterial) |
| virtual void | updateSampledImage(QSGMaterialRhiShader::RenderState &state, int binding, QSGTexture **texture, QSGMaterial *newMaterial, QSGMaterial *oldMaterial) |
| virtual 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 — это псевдоним для QFlags<Flag>. Он хранит сочетание значений Flag с помощью операции OR.
Документация по функциям-членам
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 перед возвращением. При ненулевом значении, материал сам решает, нужно ли создавать новую 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.15/qsgmaterialrhishader.html