Класс QSGSimpleMaterialShader
Класс QSGSimpleMaterialShader предоставляет удобный способ создания пользовательских материалов на основе OpenGL для графа сцены. Подробнее...
| Заголовок: | #include <QSGSimpleMaterialShader> |
| qmake: | QT += quick |
| Наследует: | QSGMaterialShader |
Открытые функции
| virtual QList<QByteArray> | attributes() const = 0 |
| virtual void | resolveUniforms() |
| const char * | uniformMatrixName() const |
| const char * | uniformOpacityName() const |
| virtual void | updateState(const State *newState, const State *oldState) = 0 |
- 5 открытых функций, унаследованных от QSGMaterialShader
Макросы
| QSG_DECLARE_SIMPLE_COMPARABLE_SHADER(Shader, State) | |
| QSG_DECLARE_SIMPLE_SHADER(Shader, State) |
Дополнительные наследуемые члены
- 6 защищённых функций, унаследованных от QSGMaterialShader
Подробное описание
Класс QSGSimpleMaterialShader предоставляет удобный способ создания пользовательских материалов на основе OpenGL для графа сцены.
Предупреждение: Этот вспомогательный класс функционален только при использовании OpenGL-бекенда Qt Quick графа сцены.
В API QSGMaterial и QSGMaterialShader требуется немного кода для создания функционального материала, QSGSimpleMaterialShader пытается скрыть часть этого кода с помощью шаблонов.
QSGSimpleMaterialShader::vertexShader() и QSGSimpleMaterialShader::fragmentShader() используются для указания фактического исходного кода шейдера. Имена вершинных атрибутов должны быть перечислены в QSGSimpleMaterialShader::attributes()
QSGSimpleMaterialShader::updateState() используется для передачи состояния материала в программу OpenGL шейдера.
Фактическая программа OpenGL шейдера доступна через функцию QSGSimpleMaterialShader::program().
Каждая реализация QSGSimpleMaterialShader работает с уникальной структурой состояния. Структура состояния должна быть объявлена с помощью макроса QSG_DECLARE_SIMPLE_SHADER.
Вот простой пример пользовательского сплошного цвета:
struct Color
{
float r, g, b, a;
};
class MinimalShader : public QSGSimpleMaterialShader<Color>
{
QSG_DECLARE_SIMPLE_SHADER(MinimalShader, Color)
public:
const char *vertexShader() const {
return
"attribute highp vec4 vertex; \n"
"uniform highp mat4 qt_Matrix; \n"
"void main() { \n"
" gl_Position = qt_Matrix * vertex; \n"
"}";
}
const char *fragmentShader() const {
return
"uniform lowp float qt_Opacity; \n"
"uniform lowp vec4 color; \n"
"void main() { \n"
" gl_FragColor = color * qt_Opacity; \n"
"}";
}
QList<QByteArray> attributes() const {
return QList<QByteArray>() << "vertex";
}
void updateState(const Color *color, const Color *) {
program()->setUniformValue("color", color->r, color->g, color->b, color->a);
}
}; Экземпляры материалов, использующие этот шейдер, могут быть созданы с помощью функции createMaterial(), которая будет определена макросом QSG_DECLARE_SIMPLE_SHADER.
QSGSimpleMaterial<Color> *material = MinimalShader::createMaterial(); material->state()->r = 1; material->state()->g = 0; material->state()->b = 0; material->state()->a = 1; node->setMaterial(material);
Граф сцены часто пытается найти материалы, которые имеют одинаковое или хотя бы сходное состояние, чтобы их можно было объединить в пакете внутри рендерера, что повышает производительность. Для указания сортируемых состояний материала используйте QSG_DECLARE_SIMPLE_COMPARABLE_SHADER вместо QSG_DECLARE_SIMPLE_SHADER. Структура состояния также должна определять функцию:
int compare(const Type *other) const;
Предупреждение: QSGSimpleMaterialShader полагается на инстанцирование шаблонов для создания QSGMaterialType, которое используется внутри рендерера графа сцены для идентификации этого шейдера. По этой причине уникальная реализация QSGSimpleMaterialShader должна быть создана с помощью уникального типа C++.
Примечание: Все классы с префиксом QSG должны использоваться только в потоке рендеринга графа сцены. См. Граф сцены и рендеринг для получения дополнительной информации.
См. также Граф сцены - Простой материал.
Документация по функциям-членам
[pure virtual] QList<QByteArray> QSGSimpleMaterialShader::attributes() const
Возвращает список имён, объявляющих вершинные атрибуты в вершинном шейдере.
[virtual] void QSGSimpleMaterialShader::resolveUniforms()
Переопределите эту функцию, чтобы разрешить расположение именованных униформ в программе шейдера.
Эта функция вызывается при инициализации шейдера материала.
const char *QSGSimpleMaterialShader::uniformMatrixName() const
Возвращает имя униформы матрицы преобразования этого элемента. Значение по умолчанию равно qt_Matrix.
const char *QSGSimpleMaterialShader::uniformOpacityName() const
Возвращает имя униформы непрозрачности этого элемента. Значение по умолчанию равно qt_Opacity.
[pure virtual] void QSGSimpleMaterialShader::updateState(const State *newState, const State *oldState)
Вызывается всякий раз, когда состояние этого шейдера должно быть обновлено от oldState до newState, типично для каждого нового набора геометрий, которые будут нарисованы.
И старое, и новое состояние передаются, чтобы реализация могла сравнить их и свести к минимуму изменения состояния, если это применимо.
Документация по макросам
QSG_DECLARE_SIMPLE_COMPARABLE_SHADER(Shader, State)
Этот макрос используется для объявления QSGMaterialType и функции createMaterial() для Shader с заданным State, где класс State должен определить функцию сравнения в форме:
int compare(const State *other) const;
QSG_DECLARE_SIMPLE_SHADER(Shader, State)
Этот макрос используется для объявления QSGMaterialType и функции createMaterial() для Shader с заданным State.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.11/qsgsimplematerialshader.html