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