Класс QSGTexture
Класс QSGTexture — базовый класс для текстур, используемых в графическом дереве сцены. Подробнее...
| Заголовок: | #include <QSGTexture> |
| qmake: | QT += quick |
| Наследует: | QObject |
| Наследуется от: |
Типы публичного доступа
| Структура | NativeTexture |
| Перечисление | Уровень анизотропии { AnisotropyNone, Anisotropy2x, Anisotropy4x, Anisotropy8x, Anisotropy16x } |
| Перечисление | Фильтрация { None, Nearest, Linear } |
| Перечисление | Режим обвязки { Repeat, ClampToEdge, MirroredRepeat } |
Функции публичного доступа
| QSGTexture() | |
| виртуальный | ~QSGTexture() override |
| QSGTexture::AnisotropyLevel | anisotropyLevel() const |
| виртуальный void | bind() = 0 |
| int | comparisonKey() const |
| QRectF | convertToNormalizedSourceRect(const QRectF &rect) const |
| QSGTexture::Filtering | filtering() const |
| виртуальный bool | hasAlphaChannel() const = 0 |
| виртуальный bool | hasMipmaps() const = 0 |
| QSGTexture::WrapMode | горизонтальныйРежимОбвязки() const |
| виртуальный bool | isAtlasTexture() const |
| QSGTexture::Filtering | mipmapFiltering() const |
| QSGTexture::NativeTexture | nativeTexture() const |
| виртуальный QRectF | нормализованнаяОбластьТекстуры() const |
| виртуальный QSGTexture * | removedFromAtlas() const |
| void | setAnisotropyLevel(QSGTexture::AnisotropyLevel level) |
| void | setFiltering(QSGTexture::Filtering filter) |
| void | установитьГоризонтальныйРежимОбвязки(QSGTexture::WrapMode hwrap) |
| void | setMipmapFiltering(QSGTexture::Filtering filter) |
| void | установитьВертикальныйРежимОбвязки(QSGTexture::WrapMode vwrap) |
| виртуальный int | textureId() const = 0 |
| виртуальный QSize | размерТекстуры() const = 0 |
| void | updateBindOptions(bool force = false) |
| void | updateRhiTexture(QRhi *rhi, QRhiResourceUpdateBatch *resourceUpdates) |
| QSGTexture::WrapMode | вертикальныйРежимОбвязки() const |
Подробное описание
Пользователи могут свободно реализовывать собственные классы текстур для поддержки произвольных входных текстур, таких как кадры видео YUV или 8-битные маски альфа-канала. Бэкенд графического дерева предоставляет стандартную реализацию обычных цветных текстур. Поскольку реализация может зависеть от аппаратного обеспечения, они создаются с помощью фабричной функции QQuickWindow::createTextureFromImage().
Текстура является оболочкой вокруг текстуры OpenGL, идентификатор которой задаётся функцией textureId(), а размер в пикселях — функцией размерТекстуры(). hasAlphaChannel() сообщает, содержит ли текстура значения непрозрачности, а hasMipmaps() — содержит ли текстура уровни mipmap.
Для использования текстуры вызовите функцию bind(). Параметры текстуры, определяющие, как текстура связывается, можно задать с помощью setMipmapFiltering(), setFiltering(), установитьГоризонтальныйРежимОбвязки() и установитьВертикальныйРежимОбвязки(). Текстура будет пытаться сохранить эти значения внутри, чтобы свести к минимуму изменения состояния OpenGL при привязке текстуры.
Атласы текстур
Некоторые бэкэнды графического дерева используют атласы текстур, объединяя несколько небольших текстур в одну большую. Если это так, функция isAtlasTexture() вернёт true. Атласы используются для улучшения сортировки алгоритмом рендеринга, что повышает производительность. Положение текстуры внутри атласа задаётся функцией нормализованнаяОбластьТекстуры().
Если текстура используется таким образом, что атлас нежелателен, функция removedFromAtlas() может быть использована для извлечения копии без использования атласа.
Примечание: Все классы с префиксом QSG должны использоваться только в потоке рендеринга графического дерева сцены. См. Графическое дерево сцены и рендеринг для получения дополнительной информации.
См. также Графическое дерево — рендеринг FBO и Графическое дерево — рендеринг FBO в потоке.
Документация по типам членов
перечисление QSGTexture::Уровень анизотропии
Определяет уровень анизотропной фильтрации, который будет использоваться, когда текстура не выровнена по экрану.
| Константа | Значение | Описание |
|---|---|---|
QSGTexture::AnisotropyNone |
0 |
Отсутствует анизотропная фильтрация. |
QSGTexture::Anisotropy2x |
1 |
Анизотропная фильтрация 2x. |
QSGTexture::Anisotropy4x |
2 |
Анизотропная фильтрация 4x. |
QSGTexture::Anisotropy8x |
3 |
Анизотропная фильтрация 8x. |
QSGTexture::Anisotropy16x |
4 |
Анизотропная фильтрация 16x. |
Это перечисление было введено или изменено в Qt 5.9.
перечисление QSGTexture::Фильтрация
Определяет, как должна фильтроваться выборка пикселей, когда координаты текстуры не выровнены по пикселям.
| Константа | Значение | Описание |
|---|---|---|
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.
Предупреждение: Эта функция должна вызываться только при работе с прямым путем рендеринга OpenGL.
Предупреждение: Эта функция может вызываться только из потока рендеринга.
int QSGTexture::comparisonKey() const
Возвращает ключ, подходящий для сравнения текстур. Обычно используется в реализациях QSGMaterial::compare().
Простое сравнение указателей QSGTexture не всегда достаточно, потому что два экземпляра QSGTexture, ссылающиеся на один и тот же объект нативной текстуры, также должны считаться равными. Отсюда и эта функция.
Примечание: В отличие от textureId(), реализации этой функции не должны и не ожидают создавать графические ресурсы (объекты текстур) в случае, если их ещё нет.
QSGTexture, у которого нет объекта нативной текстуры, обычно не равен ни одному другому QSGTexture. Есть исключения из этого правила, в частности, при использовании атласов (где несколько текстур используют одну и ту же текстуру атласа под капотом), и в этом случае реализации подклассов должны с этим справиться соответствующим образом.
Предупреждение: Эта функция может вызываться только из потока рендеринга.
Эта функция была добавлена в Qt 5.14.
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().
QSGTexture::NativeTexture QSGTexture::nativeTexture() const
Возвращает данные платформенно-специфической текстуры для этой текстуры.
Примечание: Это доступно только при использовании независимого от графического API пути рендеринга графического узла. Используйте textureId() в противном случае.
Возвращает пустой результат (object является null), если нет доступной подлежащей нативной текстуры.
Эта функция была добавлена в Qt 5.15.
См. также QQuickWindow::createTextureFromNativeObject().
[virtual] QRectF QSGTexture::normalizedTextureSubRect() const
Возвращает прямоугольник внутри textureSize(), который представляет собой эту текстуру в нормализованных координатах.
Реализация по умолчанию возвращает прямоугольник в позиции (0, 0) с шириной и высотой 1.
[virtual] QSGTexture *QSGTexture::removedFromAtlas() const
Эта функция возвращает копию текущей текстуры, удаленной из её атласа.
Текущая текстура остается неизменной, поэтому координаты текстуры не нужно обновлять.
Удаление текстуры из атласа в первую очередь полезно при передаче её в шейдер, который работает с координатами текстуры 0-1 вместо прямоугольника текстуры внутри атласа.
Если текстура не является частью атласа текстур, эта функция возвращает 0.
Реализациям этой функции рекомендуется возвращать один и тот же экземпляр для нескольких вызовов, чтобы ограничить использование памяти.
Предупреждение: Эта функция может вызываться только из потока рендеринга.
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, все свойства будут обновлены независимо от того, изменились ли они или нет.
void QSGTexture::updateRhiTexture(QRhi *rhi, QRhiResourceUpdateBatch *resourceUpdates)
Вызовите эту функцию, чтобы добавить операции загрузки изображения в resourceUpdates, если таковые имеются. Если новых данных нет (например, потому что setImage() не вызывался с момента последнего вызова этой функции), функция ничего не делает.
END_OF_DOCUMENT_MARKERМатериалы, использующие rhi текстуры, должны вызывать эту функцию из своего метода updateSampledImage(), как правило, без каких-либо условий.
Примечание: Эта функция используется только при выполнении независимого от графического API пути отрисовки графа сцены.
Предупреждение: Эту функцию можно вызывать только из потока отрисовки.
Функция была добавлена в Qt 5.14.
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.15/qsgtexture.html