Spec-Zone.ru › Qt 6.0

Тип QML ShaderEffectSource

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

Заявление импорта: import QtQuick 2.0
С: 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 по умолчанию). Это будет эквивалентно 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

Если это свойство истинно, для текстуры генерируются mipmaps.

Примечание: Некоторые реализации 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 и т. д. многообразная отрисовка может быть запрошена для части сцены без включения многообразного сглаживания для всей сцены. Таким образом, многообразное сглаживание применяется только к данному поддереву, что может привести к значительной экономии производительности, так как многообразное сглаживание не применяется к другим частям сцены.

Примечание: Включение многообразного сглаживания может быть потенциально дорогим независимо от размера слоя, так как это влечёт за собой зависящую от оборудования и драйвера стоимость производительности и памяти.

Примечание: Это свойство функционально только при наличии поддержки многообразных renderbuffer и blit framebuffer. В противном случае значение игнорируется.

Это свойство было добавлено в Qt 5.10.

sourceItem : Элемент

Это свойство содержит элемент, который будет отрисован в текстуру. Установка этого значения в 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.0/qml-qtquick-shadereffectsource.html

Spec-Zone.ru

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