Spec-Zone.ru › Qt

Тип QML ShaderEffectSource

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

Объявление импорта: import QtQuick
С версии: 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

Если это свойство истинно, 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

Spec-Zone.ru

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