Spec-Zone.ru › Qt 5.13

Тип QML ShaderEffectSource

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

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

Примечание: Если sourceItem является Rectangle с рамкой, то по умолчанию половина ширины рамки выходит за пределы текстуры. Чтобы получить всю рамку, можно расширить sourceRect.

Примечание: 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

Если это свойство имеет значение true, sourceItem скрывается, хотя он всё ещё будет отображаться в текстуре. В отличие от скрытия sourceItem путём установки visible в false, установка этого свойства в true не предотвратит попадание ввода мыши или клавиатуры на sourceItem. Свойство полезно, когда ShaderEffectSource закреплён поверх и предназначен для замены sourceItem.

live : bool

Если это свойство имеет значение true, текстура обновляется всякий раз, когда sourceItem обновляется. В противном случае она будет статичным изображением, даже если sourceItem назначен новый элемент. Свойство имеет значение true по умолчанию.

mipmap : bool

Если это свойство имеет значение true, для текстуры генерируются mipmap.

Примечание: Некоторые реализации OpenGL ES 2 не поддерживают mipmap нестепенных текстур.

recursive : bool

Установите это свойство в true, если ShaderEffectSource зависит от самого себя. ShaderEffectSources образуют цепочку зависимостей, где один 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.

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-5.13/qml-qtquick-shadereffectsource.html

Spec-Zone.ru

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