Класс QSGTexture
Класс QSGTexture — базовый класс для текстур, используемых в графическом дереве сцены. Подробнее...
| Заголовок: | #include <QSGTexture> |
| qmake: | QT += quick |
| Наследуется от: | QObject |
| Наследует: |
Типы public
| Перечисление | AnisotropyLevel { AnisotropyNone, Anisotropy2x, Anisotropy4x, Anisotropy8x, Anisotropy16x } |
| Перечисление | Filtering { None, Nearest, Linear } |
| Перечисление | WrapMode { Repeat, ClampToEdge, MirroredRepeat } |
Функции public
| QSGTexture() | |
| virtual | ~QSGTexture() override |
| QSGTexture::AnisotropyLevel | anisotropyLevel() const |
| virtual void | bind() = 0 |
| QRectF | convertToNormalizedSourceRect(const QRectF &rect) const |
| QSGTexture::Filtering | filtering() const |
| virtual bool | hasAlphaChannel() const = 0 |
| virtual bool | hasMipmaps() const = 0 |
| QSGTexture::WrapMode | horizontalWrapMode() const |
| virtual bool | isAtlasTexture() const |
| QSGTexture::Filtering | mipmapFiltering() const |
| virtual QRectF | normalizedTextureSubRect() const |
| virtual QSGTexture * | removedFromAtlas() const |
| void | setAnisotropyLevel(QSGTexture::AnisotropyLevel level) |
| void | setFiltering(QSGTexture::Filtering filter) |
| void | setHorizontalWrapMode(QSGTexture::WrapMode hwrap) |
| void | setMipmapFiltering(QSGTexture::Filtering filter) |
| void | setVerticalWrapMode(QSGTexture::WrapMode vwrap) |
| virtual int | textureId() const = 0 |
| virtual QSize | textureSize() const = 0 |
| void | updateBindOptions(bool force = false) |
| QSGTexture::WrapMode | verticalWrapMode() const |
- 31 public functions inherited from QObject
Статические члены public
| const QMetaObject | staticMetaObject |
- 9 static public members inherited from QObject
Дополнительные унаследованные члены
- 1 свойство, унаследованное от QObject
- 1 public slot, унаследованный от QObject
- 2 сигнала, унаследованные от QObject
- 9 protected functions inherited from QObject
Подробное описание
Класс QSGTexture — базовый класс для текстур, используемых в графическом дереве сцены.
Пользователи могут свободно реализовывать свои собственные классы текстур для поддержки произвольных входных текстур, таких как кадры видео YUV или 8-битные альфа-маски. Ядро графического дерева предоставляет реализацию по умолчанию для обычных цветных текстур. Поскольку реализация может зависеть от аппаратного обеспечения, они создаются с помощью фабричной функции QQuickWindow::createTextureFromImage().
Текстура является оболочкой вокруг текстуры OpenGL, идентификатор которой задаётся методом textureId(), а размер в пикселях задаётся методом textureSize(). Метод hasAlphaChannel() сообщает, содержит ли текстура значения непрозрачности, а метод hasMipmaps() сообщает, содержит ли текстура уровни mipmap.
Для использования текстуры вызовите функцию bind(). Параметры текстуры, определяющие, как связать текстуру, можно задать с помощью setMipmapFiltering(), setFiltering(), setHorizontalWrapMode() и setVerticalWrapMode(). Текстура будет внутренне пытаться сохранить эти значения, чтобы свести к минимуму изменения состояния OpenGL при связывании текстуры.
Текстурные атласы
Некоторые ядра графического дерева используют текстурные атласы, объединяя несколько небольших текстур в одну большую. В таком случае функция isAtlasTexture() вернёт true. Атласы используются для повышения производительности, оптимизируя алгоритм рендеринга.
Положение текстуры внутри атласа задаётся функцией normalizedTextureSubRect().
Если текстура используется таким образом, что атлас нежелателен, функция removedFromAtlas() может быть использована для извлечения копии без атласа.
Примечание: Все классы с префиксом QSG должны использоваться только в потоке рендеринга графического дерева сцены. Смотрите Графическое дерево сцены и рендеринг для получения дополнительной информации.
См. также Графическое дерево — рендеринг FBO и Графическое дерево — рендеринг FBO в потоке.
Документация по типу члена
enum QSGTexture::AnisotropyLevel
Определяет уровень анизотропной фильтрации, который должен использоваться, когда текстура не выровнена по экрану.
| Постоянная | Значение | Описание |
|---|---|---|
QSGTexture::AnisotropyNone |
0 |
Отсутствует анизотропная фильтрация. |
QSGTexture::Anisotropy2x |
1 |
Анизотропная фильтрация 2x. |
QSGTexture::Anisotropy4x |
2 |
Анизотропная фильтрация 4x. |
QSGTexture::Anisotropy8x |
3 |
Анизотропная фильтрация 8x. |
QSGTexture::Anisotropy16x |
4 |
Анизотропная фильтрация 16x. |
Это перечисление было введено или изменено в Qt 5.9.
enum QSGTexture::Filtering
Определяет, как должна фильтроваться выборка текселей, когда координаты текстуры не выровнены по пикселям.
| Постоянная | Значение | Описание |
|---|---|---|
QSGTexture::None |
0 |
Фильтрация не должна выполняться. Это значение используется только совместно с setMipmapFiltering(). |
QSGTexture::Nearest |
1 |
Обработка возвращает ближайший тексель. |
QSGTexture::Linear |
2 |
Обработка возвращает линейную интерполяцию соседних текселей. |
enum QSGTexture::WrapMode
Определяет, как текстура должна обрабатывать текстурные координаты.
| Постоянная | Значение | Описание |
|---|---|---|
QSGTexture::Repeat |
0 |
Используется только дробная часть текстурной координаты, что приводит к повторению значений выше 1 и ниже 0. |
QSGTexture::ClampToEdge |
1 |
Значения выше 1 ограничены значением 1, а значения ниже 0 - значением 0. |
QSGTexture::MirroredRepeat |
2 |
Если текстурная координата чётная, используется только дробная часть. Если нечётная, текстурная координата устанавливается в 1 - fractional part. Это значение было добавлено в Qt 5.10. |
Документация по членам-функциям
QSGTexture::QSGTexture()
Создаёт базовый класс QSGTexture.
[override virtual] QSGTexture::~QSGTexture()
Уничтожает QSGTexture.
QSGTexture::AnisotropyLevel QSGTexture::anisotropyLevel() const
Возвращает уровень анизотропии, используемый для фильтрации этой текстуры.
Эта функция была добавлена в Qt 5.9.
См. также setAnisotropyLevel().
[pure virtual] void QSGTexture::bind()
Вызовите эту функцию, чтобы привязать эту текстуру к текущей цели текстуры.
Привязка текстуры также может включать загрузку данных текстуры из предварительно установленного QImage.
Предупреждение: Эта функция может вызываться только из потока отрисовки.
QRectF QSGTexture::convertToNormalizedSourceRect(const QRectF &rect) const
Возвращает rect, преобразованную в нормализованные координаты.
См. также normalizedTextureSubRect().
QSGTexture::Filtering QSGTexture::filtering() const
Возвращает режим выборки, используемый для этой текстуры.
См. также setFiltering().
[pure virtual] bool QSGTexture::hasAlphaChannel() const
Возвращает true, если данные текстуры содержат альфа-канал.
[pure virtual] bool QSGTexture::hasMipmaps() const
Возвращает true, если данные текстуры содержат уровни mipmap.
QSGTexture::WrapMode QSGTexture::horizontalWrapMode() const
Возвращает горизонтальный режим обёртывания, используемый для этой текстуры.
См. также setHorizontalWrapMode().
[virtual] bool QSGTexture::isAtlasTexture() const
Возвращает, является ли эта текстура частью атласа.
По умолчанию возвращает false.
QSGTexture::Filtering QSGTexture::mipmapFiltering() const
Возвращает, используется ли mipmapping при выборке из этой текстуры.
См. также setMipmapFiltering().
[virtual] QRectF QSGTexture::normalizedTextureSubRect() const
Возвращает прямоугольник внутри textureSize(), который представляет эту текстуру в нормализованных координатах.
По умолчанию возвращает прямоугольник в позиции (0, 0) с шириной и высотой 1.
[virtual] QSGTexture *QSGTexture::removedFromAtlas() const
Эта функция возвращает копию текущей текстуры, удалённой из её атласа.
Текущая текстура остаётся неизменной, поэтому обновлять текстурные координаты не нужно.
Удаление текстуры из атласа, в основном, полезно, когда вы передаёте её в шейдер, который работает с текстурными координатами 0-1 вместо прямоугольника текстуры внутри атласа.
Если текстура не является частью атласа текстур, эта функция возвращает nullptr.
Реализации этой функции рекомендуют возвращать тот же экземпляр для нескольких вызовов, чтобы ограничить использование памяти.
Предупреждение: Эта функция может вызываться только из потока отрисовки.
void QSGTexture::setAnisotropyLevel(QSGTexture::AnisotropyLevel level)
Устанавливает уровень анизотропной фильтрации для предстоящего вызова bind() в level. Значение по умолчанию - QSGTexture::AnisotropyNone, что означает, что анизотропная фильтрация отключена.
Эта функция была добавлена в Qt 5.9.
См. также anisotropyLevel().
void QSGTexture::setFiltering(QSGTexture::Filtering filter)
Устанавливает режим выборки, используемый для предстоящего вызова bind() в filter.
См. также filtering().
void QSGTexture::setHorizontalWrapMode(QSGTexture::WrapMode hwrap)
Устанавливает горизонтальный режим обёртывания для предстоящего вызова bind() в hwrap.
См. также horizontalWrapMode().
void QSGTexture::setMipmapFiltering(QSGTexture::Filtering filter)
Устанавливает режим выборки mipmap для предстоящего вызова bind() в filter.
Установка фильтрации mipmap не имеет эффекта, если у текстуры нет mipmap.
См. также mipmapFiltering() и hasMipmaps().
void QSGTexture::setVerticalWrapMode(QSGTexture::WrapMode vwrap)
Устанавливает вертикальный режим обёртывания для предстоящего вызова bind() в vwrap.
См. также verticalWrapMode().
[pure virtual] int QSGTexture::textureId() const
Возвращает идентификатор OpenGL текстуры для этой текстуры.
Значение по умолчанию равно 0, что означает недействительный идентификатор текстуры.
Функция должна всегда возвращать правильный идентификатор текстуры.
Предупреждение: Эта функция может вызываться только из потока отрисовки.
[pure virtual] QSize QSGTexture::textureSize() const
Возвращает размер текстуры.
void QSGTexture::updateBindOptions(bool force = false)
Обновляет состояние текстуры, чтобы соответствовать текущим параметрам фильтрации, mipmap и обёртывания.
Если force равно true, все свойства будут обновлены независимо от того, изменились они или нет.
QSGTexture::WrapMode QSGTexture::verticalWrapMode() const
Возвращает вертикальный режим обёртывания, используемый для этой текстуры.
См. также setVerticalWrapMode().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.12/qsgtexture.html