Spec-Zone.ru › Qt 5.9

Тип QML ShaderEffectSource

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

Выражение импорта: import QtQuick 2.7
С момента: Qt 5.0
Наследует:

Item

  • Список всех членов, включая унаследованные

Свойства

  • format : перечисление
  • hideSource : bool
  • live : bool
  • mipmap : bool
  • recursive : bool
  • 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 зависит от себя, его обновление означает, что он снова сразу же становится грязным.

sourceItem : Элемент

Это свойство содержит элемент, который будет отрисован в текстуру. Установка этого значения в null при live = true освободит ресурсы текстуры.

sourceRect : прямоугольник

Это свойство определяет, какой прямоугольный участок sourceItem будет отрисован в текстуру. Прямоугольник источника может быть больше, чем сам sourceItem. Если прямоугольник равен null, что является значением по умолчанию, весь sourceItem будет отрисован в текстуру.

textureMirroring : перечисление

Это свойство определяет, как сгенерированная текстура OpenGL должна быть отражена. Значение по умолчанию — ShaderEffectSource.MirrorVertically. Пользовательское отражение может быть полезно, если сгенерированная текстура напрямую используется пользовательскими шейдерами, такими как те, которые указаны в ShaderEffect. Отражение не влияет на отображение элемента ShaderEffectSource в пользовательском интерфейсе.

  • ShaderEffectSource.NoMirroring - Отражение отсутствует
  • ShaderEffectSource.MirrorHorizontally - Сгенерированная текстура отражается по оси X.
  • ShaderEffectSource.MirrorVertically - Сгенерированная текстура отражается по оси Y.

Это свойство QML было добавлено в 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-5.9/qml-qtquick-shadereffectsource.html

Spec-Zone.ru

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