Тип QML ShaderEffectSource
Отображает элемент Qt Quick в текстуру и отображает её. Подробнее...
| Заявление об импорте: | import QtQuick 2.11 |
| С тех пор: | 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.
Примечание: Если sourceItem является Rectangle с границей, по умолчанию половина ширины границы выходит за пределы текстуры. Чтобы получить всю границу, вы можете расширить sourceRect.
Примечание: ShaderEffectSource полагается на поддержку многократной выборки FBO для сглаживания краёв. Если базовое оборудование не поддерживает это, что характерно для большинства встраиваемых графических чипов, края, отрисованные внутри ShaderEffectSource, не будут сглажены. Одним из способов исправить это является удвоение размера источника эффекта и рендеринг его с smooth: true (это значение smooth по умолчанию). Это будет эквивалентно 4x многократной выборке, за счёт снижения производительности и увеличения использования памяти.
Предупреждение: В большинстве случаев использование 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 назначен новый элемент. Свойство по умолчанию истинно.
mipmap : bool
Если это свойство истинно, для текстуры генерируются mip-уровни.
Примечание: Некоторые реализации OpenGL ES 2 не поддерживают mip-мапинг текстур, не являющихся степенью двойки.
recursive : bool
Установите это свойство в true, если ShaderEffectSource имеет зависимость от самого себя. ShaderEffectSource образуют цепочку зависимостей, где один ShaderEffectSource может быть частью sourceItem другого. Если в этой цепочке есть цикл, ShaderEffectSource может попытаться отрисовать в ту же текстуру, которую он использует в качестве источника, что запрещено OpenGL. Когда это свойство установлено в true, выделяется дополнительная текстура, чтобы ShaderEffectSource мог сохранить копию текстуры из предыдущего кадра. Затем он может отрисовать в одну текстуру и использовать текстуру из предыдущего кадра в качестве источника.
Установка этого свойства и live в true заставит графический движок сцены непрерывно отрисовывать. Поскольку ShaderEffectSource зависит от самого себя, обновление его означает, что он сразу же становится грязным снова.
samples : int
Это свойство позволяет запросить рендеринг с многократной выборкой.
По умолчанию многократная выборка включена, когда многократная выборка включена для всего окна, предполагая, что используемый рендерер сцены и базовая графическая API поддерживают это.
Установкой значения в 2, 4 и т. д. можно запросить многократную выборку для части сцены без включения многократной выборки для всей сцены. Таким образом, многократная выборка применяется только к данному поддереву, что может привести к значительной экономии производительности, так как многократная выборка не применяется к другим частям сцены.
Примечание: Включение многократной выборки может быть потенциально дорогостоящим независимо от размера слоя, так как это влечёт за собой аппаратную и драйверную зависимую производительность и затраты памяти.
Примечание: Это свойство функционально только при наличии поддержки многократной выборки renderbuffers и фреймбуфера blits. В противном случае значение игнорируется молча.
Это свойство было добавлено в 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.
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/archives/qt-5.11/qml-qtquick-shadereffectsource.html