Spec-Zone.ru › Qt 5.9

Класс QSGSimpleMaterialShader

Класс QSGSimpleMaterialShader предоставляет удобный способ создания пользовательских материалов на основе OpenGL для графа сцены. Подробнее...

Заголовок: #include <QSGSimpleMaterialShader>
qmake: QT += quick
Наследует: QSGMaterialShader
  • Список всех членов, включая унаследованные

Открытые функции

виртуальный QList<QByteArray> attributes() const = 0
виртуальный void resolveUniforms()
const char * uniformMatrixName() const
const char * uniformOpacityName() const
виртуальный 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 scenegraph.

В 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/qt-5.9/qsgsimplematerialshader.html

Spec-Zone.ru

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