Тип QML ShaderEffectSource
Отображает элемент Qt Quick в виде текстуры и выводит её. Подробнее...
| Заявление импорта: | import QtQuick 2.14 |
| С: | 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
Если это свойство истинно, генерируются mipmaps для текстуры.
Примечание: Некоторые реализации OpenGL ES 2 не поддерживают mipmapping нестепенных-двух текстур.
recursive : bool
Установите это свойство в true, если ShaderEffectSource имеет зависимость от самого себя. ShaderEffectSource образуют цепочку зависимостей, где один ShaderEffectSource может быть частью sourceItem другого. Если в этой цепочке есть цикл, ShaderEffectSource может попытаться отобразить в ту же текстуру, которую он использует в качестве источника, что запрещено OpenGL. При установке этого свойства в true выделяется дополнительная текстура, чтобы ShaderEffectSource мог сохранить копию текстуры из предыдущего кадра. Затем он может отобразить в одну текстуру и использовать текстуру из предыдущего кадра в качестве источника.
Установка этого свойства и live в true вызовет непрерывное отображение дерева сцены. Поскольку ShaderEffectSource зависит от себя, его обновление означает, что он сразу же становится грязным снова.
samples : int
Это свойство позволяет запросить многократное отображение.
По умолчанию многократное отображение включено, когда многократное отображение включено для всего окна, предполагая, что используемый рендерер дерева сцены и используемый графический API поддерживают это.
Установкой значения в 2, 4 и т.д. можно запросить многократное отображение только для части сцены, не включая многократное отображение для всей сцены. Таким образом, многократное отображение применяется только к заданному поддереву, что может привести к существенному повышению производительности, поскольку многократное отображение не применяется к другим частям сцены.
Примечание: Включение многократного отображения может быть потенциально дорогим независимо от размера слоя, так как влечёт за собой затраты производительности и памяти, зависящие от аппаратного обеспечения и драйвера.
Примечание: Это свойство функционально только при наличии поддержки многократно выборочных буферов рендеринга и операций копирования буферов кадров. В противном случае значение игнорируется.
Это свойство было добавлено в Qt 5.10.
sourceItem : Item
Это свойство содержит элемент, который нужно отобразить в текстуре. Установка в 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_MARKERtextureSize : размер
Это свойство задаёт требуемый размер текстуры. Если оно пустое (по умолчанию), используется размер исходного прямоугольника.
Примечание: Некоторые платформы имеют ограничение на минимальный размер буферов фреймов, что означает, что фактический размер текстуры может быть больше, чем запрошенный размер.
wrapMode : перечисление
Это свойство определяет режимы обрезки OpenGL, связанные с текстурой. Изменение этого свойства имеет смысл, когда элемент используется в качестве исходной текстуры эффекта шейдера.
Значение по умолчанию — 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.14/qml-qtquick-shadereffectsource.html