Spec-Zone.ru › Qt 5.15

Тип QML ShaderEffectSource

Отображает элемент Qt Quick в текстуре и отображает его. Подробнее...

Оператор импорта: import QtQuick 2.15
С момента: Qt 5.0
Наследует:

Item

  • Список всех членов, включая наследуемые

Свойства

  • format : перечисление
  • hideSource : bool
  • live : bool
  • mipmap : bool
  • recursive : bool
  • samples : int
  • sourceItem : Item
  • sourceRect : прямоугольник
  • textureMirroring : перечисление
  • textureSize : размер
  • wrapMode : перечисление

Методы

  • scheduleUpdate()

Подробное описание

Тип ShaderEffectSource отображает sourceItem в текстуре и отображает её в сцене. sourceItem рисуется в текстуре так, как будто это корневой элемент с полной непрозрачностью. Таким образом, сам sourceItem может быть невидимым, но всё равно отображаться в текстуре.

ShaderEffectSource можно использовать как:

  • источник текстуры в ShaderEffect. Это позволяет применять пользовательские эффекты шейдеров к любому элементу Qt Quick.
  • кеш для сложного элемента. Сложный элемент может быть отрисован один раз в текстуру, которая затем может быть анимирована свободно без необходимости повторного рендеринга сложного элемента в каждом кадре.
  • слой непрозрачности. ShaderEffectSource позволяет применять непрозрачность к элементам как группе, а не к каждому элементу индивидуально.

import QtQuick 2.0

Rectangle {
    width: 200
    height: 100
    gradient: Gradient {
        GradientStop { position: 0; color: "white" }
        GradientStop { position: 1; color: "black" }
    }
    Row {
        opacity: 0.5
        Item {
            id: foo
            width: 100; height: 100
            Rectangle { x: 5; y: 5; width: 60; height: 60; color: "red" }
            Rectangle { x: 20; y: 20; width: 60; height: 60; color: "orange" }
            Rectangle { x: 35; y: 35; width: 60; height: 60; color: "yellow" }
        }
        ShaderEffectSource {
            width: 100; height: 100
            sourceItem: foo
        }
    }
}

Тип ShaderEffectSource не перенаправляет ни ввод мыши, ни ввод клавиатуры в sourceItem. Если вы скрываете sourceItem, установив visible в false или opacity в ноль, он больше не будет реагировать на ввод. В тех случаях, когда ShaderEffectSource должен заменить sourceItem, как правило, вы хотите скрыть sourceItem, но при этом обрабатывать ввод. Для этого можно использовать свойство hideSource.

Примечание: ShaderEffectSource полагается на поддержку многократного выборки FBO для сглаживания краёв. Если базовое оборудование не поддерживает это, что характерно для большинства встраиваемых графических чипов, края, отрисованные внутри ShaderEffectSource, не будут сглаживаться. Один из способов исправить это — удвоить размер источника эффекта и отрисовать его с smooth: true (это значение по умолчанию для smooth). Это будет эквивалентно 4-кратной многократной выборке, но с меньшей производительностью и большим потреблением памяти.

Предупреждение: В большинстве случаев использование ShaderEffectSource снижает производительность, а во всех случаях увеличивает использование видеопамяти. Отрисовка через ShaderEffectSource также может привести к снижению качества, поскольку некоторые реализации OpenGL поддерживают многократную выборку буфера заднего плана, но не многократную выборку объектов фреймбуфера.

Документация по свойствам

format : перечисление

Это свойство определяет внутренний формат OpenGL текстуры. Изменение этого свойства имеет смысл, когда элемент используется как исходная текстура ShaderEffect. В зависимости от реализации OpenGL, это свойство может позволить сэкономить память текстуры.

  • ShaderEffectSource.Alpha - GL_ALPHA
  • ShaderEffectSource.RGB - GL_RGB
  • ShaderEffectSource.RGBA - GL_RGBA

Примечание: Некоторые реализации OpenGL не поддерживают формат GL_ALPHA.

hideSource : bool

Если это свойство имеет значение true, sourceItem скрыт, хотя он всё равно будет отрисован в текстуру. В отличие от скрытия sourceItem путём установки visible в false, установка этого свойства в true не препятствует получению sourceItem ввода мыши или клавиатуры. Свойство полезно, когда ShaderEffectSource прикреплен поверх sourceItem и предназначен для его замены.

live : bool

Если это свойство имеет значение true, текстура обновляется всякий раз, когда sourceItem обновляется. В противном случае она будет статичной картинкой, даже если sourceItem назначен новый элемент. Свойство имеет значение true по умолчанию.

mipmap : bool

Если это свойство имеет значение true, для текстуры генерируются mipmap.

Примечание: Некоторые реализации OpenGL ES 2 не поддерживают mipmapping для текстур, не являющихся степенью двойки.

recursive : bool

Установите это свойство в true, если ShaderEffectSource имеет зависимость от самого себя. ShaderEffectSource образуют цепочку зависимостей, где один ShaderEffectSource может быть частью sourceItem другого. Если в этой цепочке есть цикл, ShaderEffectSource может попытаться отрисовать в ту же текстуру, которую использует в качестве источника, что запрещено OpenGL. При установке этого свойства в true выделяется дополнительная текстура, чтобы ShaderEffectSource мог сохранить копию текстуры из предыдущего кадра. Затем он может отрисовать в одну текстуру и использовать текстуру из предыдущего кадра в качестве источника.

Установка этого свойства и live в true приведет к непрерывному рендерингу дерева сцен. Так как ShaderEffectSource зависит от себя, его обновление означает, что он сразу же снова становится грязным.

samples : int

Это свойство позволяет запросить рендеринг с многократной выборкой.

По умолчанию многократная выборка включена, когда многократная выборка включена для всего окна, предполагая, что используемый рендерер дерева сцен и базовая графическая API поддерживают это.

Установив значение в 2, 4 и т. д., можно запросить рендеринг с многократной выборкой для части сцены без включения многократной выборки для всей сцены. Таким образом, многократная выборка применяется только к заданному поддереву, что может привести к существенному увеличению производительности, поскольку многократная выборка не применяется к другим частям сцены.

Примечание: Включение многократной выборки может быть потенциально дорогостоящим независимо от размера слоя, так как это влечёт за собой зависимые от оборудования и драйвера затраты на производительность и память.

Примечание: Это свойство функционально только в том случае, если доступна поддержка многократной выборки renderbuffers и блинтов фреймбуфера. В противном случае значение игнорируется.

Это свойство было добавлено в Qt 5.10.

sourceItem : Элемент

Это свойство содержит элемент, который будет отрисован в текстуру. Установка этого значения в null, когда live имеет значение true, высвободит ресурсы текстуры.

sourceRect : прямоугольник

Это свойство определяет прямоугольную область sourceItem, которая должна быть отрисована в текстуру. Прямоугольник источника может быть больше самого sourceItem. Если прямоугольник равен null, что является значением по умолчанию, весь sourceItem отрисовывается в текстуру.

textureMirroring : перечисление

Это свойство определяет, как должна быть отражена сгенерированная текстура OpenGL. Значение по умолчанию — ShaderEffectSource.MirrorVertically. Пользовательская зеркальная операция может быть полезной, если сгенерированная текстура напрямую используется пользовательскими шейдерами, такими как те, что указаны в ShaderEffect. Отражение не влияет на отображение элемента ShaderEffectSource в пользовательском интерфейсе.

  • ShaderEffectSource.NoMirroring - Без отражения
  • ShaderEffectSource.MirrorHorizontally - Сгенерированная текстура переворачивается по оси X.
  • ShaderEffectSource.MirrorVertically - Сгенерированная текстура переворачивается по оси Y.

Это свойство было добавлено в Qt 5.6.

END_OF_DOCUMENT_MARKER

textureSize : размер

Это свойство хранит запрашиваемый размер текстуры. Если оно пустое (по умолчанию), используется размер исходного прямоугольника.

Примечание: Некоторые платформы имеют ограничение на минимальный размер буфера фреймов, что означает, что фактический размер текстуры может быть больше, чем запрашиваемый.

wrapMode : перечисление

Это свойство определяет режимы обёртки OpenGL, связанные с текстурой. Изменение этого свойства имеет смысл, когда элемент используется как исходная текстура эффекта ShaderEffect.

Значение по умолчанию - ShaderEffectSource.ClampToEdge.

  • ShaderEffectSource.ClampToEdge - GL_CLAMP_TO_EDGE по горизонтали и вертикали
  • ShaderEffectSource.RepeatHorizontally - GL_REPEAT по горизонтали, GL_CLAMP_TO_EDGE по вертикали
  • ShaderEffectSource.RepeatVertically - GL_CLAMP_TO_EDGE по горизонтали, GL_REPEAT по вертикали
  • ShaderEffectSource.Repeat - GL_REPEAT по горизонтали и вертикали

Примечание: Некоторые реализации OpenGL ES 2 не поддерживают режим обёртки GL_REPEAT для текстур, не являющихся степенями двойки.

Документация методов

scheduleUpdate()

Планирует повторное отрисовку текстуры в следующем кадре. Используйте это для обновления текстуры, когда live равно false.

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.15/qml-qtquick-shadereffectsource.html

Spec-Zone.ru

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