Класс QSGTexture
Класс QSGTexture является базовым классом для текстур, используемых в графическом дереве сцены. Подробнее...
| Заголовок: | #include <QSGTexture> |
| CMake: | find_package(Qt6 COMPONENTS Quick REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Quick) |
| qmake: | QT += quick |
| Наследуется от: | QObject |
| Наследует: |
Открытые типы
| Перечисление | AnisotropyLevel { AnisotropyNone, Anisotropy2x, Anisotropy4x, Anisotropy8x, Anisotropy16x } |
| Перечисление | Filtering { None, Nearest, Linear } |
| Перечисление | WrapMode { Repeat, ClampToEdge, MirroredRepeat } |
Открытые функции
| QSGTexture() | |
| виртуальный | ~QSGTexture() override |
| QSGTexture::AnisotropyLevel | anisotropyLevel() const |
| виртуальный qint64 | comparisonKey() const = 0 |
| QRectF | convertToNormalizedSourceRect(const QRectF &rect) const |
| QSGTexture::Filtering | filtering() const |
| виртуальный bool | hasAlphaChannel() const = 0 |
| виртуальный bool | hasMipmaps() const = 0 |
| QSGTexture::WrapMode | horizontalWrapMode() const |
| виртуальный bool | isAtlasTexture() const |
| QSGTexture::Filtering | mipmapFiltering() const |
| QNativeInterface * | nativeInterface() const |
| виртуальный QRectF | normalizedTextureSubRect() const |
| виртуальный QSGTexture * | removedFromAtlas(QRhiResourceUpdateBatch *resourceUpdates = nullptr) 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) |
| виртуальный QSize | textureSize() const = 0 |
| QSGTexture::WrapMode | verticalWrapMode() const |
Подробное описание
Пользователи могут свободно реализовывать собственные классы текстур для поддержки произвольных входных текстур, таких как кадр видео YUV или альфа-маски с 8 битами. Графическое дерево сцены предоставляет реализацию по умолчанию для RGBA-текстур. Реализация по умолчанию не создается напрямую, а создается через фабричные функции, такие как QQuickWindow::createTextureFromImage().
При использовании реализации по умолчанию каждая QSGTexture подкрепляется QRhiTexture, которая в свою очередь содержит объект нативной текстуры, такой как текстура OpenGL или изображение Vulkan.
Размер в пикселях задается функцией textureSize(). Функция hasAlphaChannel() сообщает, содержит ли текстура значения непрозрачности, а функция hasMipmaps() сообщает, содержит ли текстура уровни mipmap.
Материалы, работающие с текстурами, переопределяют updateSampledImage(), чтобы предоставить логику, которая определяет, какая базовая нативная текстура QSGTexture должна быть экспонирована в заданной точке привязки ресурса шейдера.
QSGTexture не разделяет объекты изображения (текстуры) и саплера. Параметры фильтрации и обёртки могут быть заданы с помощью setMipmapFiltering(), setFiltering(), setHorizontalWrapMode() и setVerticalWrapMode(). Графическое дерево сцены и абстракция графики Qt заботятся о создании отдельных объектов саплера, когда это необходимо.
Текстурные атласы
Некоторые бэкэнды графического дерева используют текстурные атласы, объединяя несколько маленьких текстур в одну большую. Если это так, функция isAtlasTexture() вернёт true. Атласы используются для улучшения сортировки алгоритмом рендеринга, что повышает производительность. Атласы также необходимы для слияния (объединения геометрии для уменьшения числа вызовов отрисовки), так как два экземпляра одного материала, использующие разные QSGTextures, не поддаются слиянию, в то время как если обе QSGTextures ссылаются на один и тот же атлас, слияние может произойти, при условии, что материалы в остальном совместимы.
Расположение текстуры внутри атласа задается функцией normalizedTextureSubRect().
Если текстура используется таким образом, что атлас нежелателен, функция removedFromAtlas() может использоваться для извлечения копии без атласа.
Примечание: Все классы с префиксом QSG должны использоваться только в потоке рендеринга графического дерева сцены. Подробнее см. Графическое дерево сцены и рендеринг.
См. также Графическое дерево - рендеринг FBO.
Документация по типам членов
[since 5.9] Перечисление QSGTexture::AnisotropyLevel
Указывает уровень анизотропной фильтрации, который будет использоваться, когда текстура не выровнена с экраном.
| Константа | Значение | Описание |
|---|---|---|
QSGTexture::AnisotropyNone |
0 |
Отсутствует анизотропная фильтрация. |
QSGTexture::Anisotropy2x |
1 |
Анизотропная фильтрация 2x. |
QSGTexture::Anisotropy4x |
2 |
Анизотропная фильтрация 4x. |
QSGTexture::Anisotropy8x |
3 |
Анизотропная фильтрация 8x. |
QSGTexture::Anisotropy16x |
4 |
Анизотропная фильтрация 16x. |
Это перечисление было добавлено или изменено в Qt 5.9.
Перечисление QSGTexture::Filtering
Указывает, как должна фильтроваться выборка пикселей текстуры, когда координаты текстуры не выровнены с пикселями.
| Константа | Значение | Описание |
|---|---|---|
QSGTexture::None |
0 |
Фильтрация не должна выполняться. Это значение используется только совместно с setMipmapFiltering(). |
QSGTexture::Nearest |
1 |
Выборка возвращает ближайший пиксель. |
QSGTexture::Linear |
2 |
Выборка возвращает линейную интерполяцию соседних пикселей. |
Перечисление 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.
[since 5.9] QSGTexture::AnisotropyLevel QSGTexture::anisotropyLevel() const
Возвращает уровень анизотропии, используемый для фильтрации этой текстуры.
Эта функция была добавлена в Qt 5.9.
См. также setAnisotropyLevel().
[pure virtual, since 5.14] qint64 QSGTexture::comparisonKey() const
Возвращает ключ, подходящий для сравнения текстур. Обычно используется в реализациях QSGMaterial::compare().
Просто сравнение указателей на QSGTexture не всегда достаточно, потому что два экземпляра QSGTexture, которые ссылаются на один и тот же объект нативной текстуры, также должны считаться равными. Отсюда и необходимость этой функции.
Не ожидается, что реализации этой функции и не следует создавать какие-либо графические ресурсы (объекты нативных текстур) в случае их отсутствия.
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().
template <typename QNativeInterface> QNativeInterface *QSGTexture::nativeInterface() const
Возвращает нативный интерфейс заданного типа для текстуры.
Эта функция предоставляет доступ к специфичной для платформы функциональности QSGTexture, как объявлено в пространстве имен QNativeInterface:
Предоставляет доступ к объектам текстур Direct3D 11 и позволяет их адаптацию |
|
Предоставляет доступ к объектам текстур Metal и позволяет их адаптацию |
|
Предоставляет доступ к объектам текстур OpenGL и позволяет их адаптацию |
|
Предоставляет доступ к объектам изображений Vulkan и позволяет их адаптацию |
Это позволяет получить доступ к базовому объекту нативной текстуры, например, к идентификатору текстуры GLuint с OpenGL или к дескриптору VkImage с Vulkan.
Если запрашиваемого интерфейса нет, возвращается nullptr.
[virtual] QRectF QSGTexture::normalizedTextureSubRect() const
Возвращает прямоугольник внутри textureSize(), который представляет эту текстуру в нормализованных координатах.
Реализация по умолчанию возвращает прямоугольник в позиции (0, 0) с шириной и высотой 1.
[virtual] QSGTexture *QSGTexture::removedFromAtlas(QRhiResourceUpdateBatch *resourceUpdates = nullptr) const
Эта функция возвращает копию текущей текстуры, удалённой из своего атласа.
Текущая текстура остаётся неизменной, поэтому координаты текстуры не нужно обновлять.
Удаление текстуры из атласа в первую очередь полезно, когда она передаётся в шейдер, который работает с координатами текстуры от 0 до 1 вместо подпрямоугольника текстуры внутри атласа.
Если текстура не является частью атласа текстур, эта функция возвращает 0.
Реализации этой функции рекомендуется возвращать тот же экземпляр для нескольких вызовов, чтобы ограничить использование памяти.
resourceUpdates — это необязательная группа обновлений ресурсов, в которую, при необходимости, добавляются операции над текстурой. Материалы могут получить экземпляр из QSGMaterialShader::RenderState. Если значение null, реализация removedFromAtlas() создаёт свою собственную группу обновлений и сразу же отправляет её. Однако если указан действительный экземпляр, эта функция не будет отправлять группу обновлений.
Предупреждение: эту функцию можно вызывать только из потока отрисовки.
[since 5.9] void QSGTexture::setAnisotropyLevel(QSGTexture::AnisotropyLevel level)
Устанавливает уровень анизотропной фильтрации в level. Значение по умолчанию — QSGTexture::AnisotropyNone, что означает, что анизотропная фильтрация не включена.
Примечание: запрос может быть проигнорирован в зависимости от используемого графического API. Нет гарантии, что анизотропная фильтрация будет поддерживаться во время выполнения.
Эта функция была добавлена в Qt 5.9.
См. также anisotropyLevel().
void QSGTexture::setFiltering(QSGTexture::Filtering filter)
Устанавливает режим выборки в filter.
См. также filtering().
void QSGTexture::setHorizontalWrapMode(QSGTexture::WrapMode hwrap)
Устанавливает горизонтальный режим обрезки в hwrap
См. также horizontalWrapMode().
void QSGTexture::setMipmapFiltering(QSGTexture::Filtering filter)
Устанавливает режим выборки mipmap в filter.
Установка mipmap-фильтрации не имеет эффекта, если у текстуры нет mipmap.
См. также mipmapFiltering() и hasMipmaps().
void QSGTexture::setVerticalWrapMode(QSGTexture::WrapMode vwrap)
Устанавливает вертикальный режим обрезки в vwrap
См. также verticalWrapMode().
[pure virtual] QSize QSGTexture::textureSize() const
Возвращает размер текстуры.
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-6.1/qsgtexture.html