Тип QML ShaderEffectSource
Отображает элемент Qt Quick в текстуру и отображает его. Подробнее...
| Объявление импорта: | import QtQuick |
| С версии: | Qt 5.0 |
| Наследует от: |
Свойства
- format : перечисление
- hideSource : bool
- live : bool
- mipmap : bool
- recursive : bool
- samples : int
- sourceItem : Item
- sourceRect : прямоугольник
- textureMirroring : перечисление
- textureSize : размер
- wrapMode : перечисление
Методы
Подробное описание
Тип 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
Если это свойство истинно, sourceItem скрыт, хотя он по-прежнему будет рендериться в текстуру. В отличие от скрытия sourceItem установкой visible в false, установка этого свойства в true не предотвратит попадание событий мыши или клавиатуры на sourceItem. Свойство полезно, когда ShaderEffectSource закреплён поверх и предназначен для замены sourceItem.
live : bool
Если это свойство истинно, текстура обновляется всякий раз, когда sourceItem обновляется. В противном случае, это будет статичное изображение, даже если sourceItem присвоен новый элемент. Свойство по умолчанию равно true.
mipmap : bool
Если это свойство истинно, для текстуры генерируются mipmap.
Примечание: Некоторые реализации OpenGL ES 2 не поддерживают mipmap для текстур, не являющихся степенями двойки.
recursive : bool
Установите это свойство в true, если ShaderEffectSource зависит от самого себя. ShaderEffectSource образуют цепочку зависимостей, где один ShaderEffectSource может быть частью sourceItem другого. Если в этой цепочке есть цикл, ShaderEffectSource может попытаться отрисовать в ту же текстуру, которую использует как исходник, что запрещено OpenGL. Когда это свойство установлено в true, выделяется дополнительная текстура, чтобы ShaderEffectSource мог сохранить копию текстуры из предыдущего кадра. Затем он может отрисовать в одну текстуру и использовать текстуру из предыдущего кадра в качестве источника.
Установка этого свойства и live в true вызовет непрерывный рендеринг графа сцены. Поскольку ShaderEffectSource зависит от самого себя, обновление означает, что он сразу же снова становится грязным.
[с версии 5.10] samples : int
Это свойство позволяет запросить многократную выборку.
По умолчанию многократная выборка включена, когда многократная выборка включена для всего окна, предполагая, что используемый рендерер графа сцены и используемый графический API поддерживают это.
Установив значение в 2, 4 и т. д., многократную выборку можно запросить для части сцены без включения многократной выборки для всей сцены. Таким образом, многократная выборка применяется только к заданному поддереву, что может привести к существенному увеличению производительности, поскольку многократная выборка не применяется к другим частям сцены.
Примечание: Включение многократной выборки может быть потенциально дорогим независимо от размера слоя, поскольку это влечёт за собой зависящие от аппаратного обеспечения и драйвера затраты на производительность и память.
Примечание: Это свойство функционально только тогда, когда поддерживаются многократные буферы рендеринга и блинки фреймбуфера. В противном случае значение игнорируется.
Это свойство было добавлено в Qt 5.10.
sourceItem : Item
Это свойство содержит элемент, который должен быть рендерен в текстуру. Установка его в null при true значении live освободит ресурсы текстуры.
sourceRect : прямоугольник
Это свойство определяет прямоугольную область sourceItem, которая должна быть рендерена в текстуру. Прямоугольник источника может быть больше, чем сам sourceItem. Если прямоугольник равен null, что является значением по умолчанию, весь sourceItem рендерится в текстуру.
[с версии 5.6] textureMirroring : перечисление
Это свойство определяет, как должна быть отражена сгенерированная текстура OpenGL. Значение по умолчанию - ShaderEffectSource.MirrorVertically. Пользовательская обработка отражения может быть полезна, если сгенерированная текстура напрямую используется пользовательскими шейдерами, такими как те, что указаны в ShaderEffect. Отражение не влияет на отображение элемента ShaderEffectSource в пользовательском интерфейсе.
- ShaderEffectSource.NoMirroring - Отсутствие отражения
- ShaderEffectSource.MirrorHorizontally - Текстура, сгенерированная по горизонтали, перевёрнута относительно оси X.
- ShaderEffectSource.MirrorVertically - Текстура, сгенерированная по вертикали, перевёрнута относительно оси Y.
Этот свойство был введён в Qt 5.6.
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-6.2/qml-qtquick-shadereffectsource.html