Класс 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() сообщает, содержит ли текстура уровни мип-мап.
Материалы, работающие с текстурами, переопределяют updateSampledImage(), чтобы предоставить логику, определяющую, какая нативная текстура QSGTexture должна быть представлена в заданной точке привязки ресурсов шейдера.
QSGTexture не разделяет объекты изображения (текстуры) и самплеров. Параметры фильтрации и обёртывания можно указать с помощью setMipmapFiltering(), setFiltering(), setHorizontalWrapMode() и setVerticalWrapMode(). Графическое дерево сцены и абстракция графики Qt заботятся о создании отдельных объектов самплеров, если это необходимо.
Текстурные атласы
Некоторые бэкэнды графического дерева сцены используют текстурные атласы, группируя несколько мелких текстур в одну большую. В этом случае функция isAtlasTexture() вернёт true. Атласы используются для улучшения сортировки алгоритмом рендеринга, что увеличивает производительность. Атласы также необходимы для объединения (объединения геометрии для уменьшения количества вызовов отрисовки), так как два экземпляра одного материала, использующие две разные QSGTextures, не могут быть объединены, в то время как если обе QSGTextures ссылаются на один и тот же атлас, объединение может произойти, если материалы в остальном совместимы.
Расположение текстуры в атласе задаётся функцией normalizedTextureSubRect().
Если текстура используется таким образом, что атлас не предпочтительнее, функция removedFromAtlas() может использоваться для извлечения копии без атласа.
Примечание: Все классы с префиксом QSG должны использоваться только в потоке рендеринга графического дерева сцены. См. Графическое дерево сцены и рендеринг для получения дополнительной информации.
См. также Графическое дерево сцены - Отрисовка FBO.
Документация по типам членов
Перечисление QSGTexture::AnisotropyLevel
Указывает уровень анизотропной фильтрации, который следует использовать, когда текстура не выровнена по экрану.
| Постоянная | Значение | Описание |
|---|---|---|
| Отсутствует анизотропная фильтрация. | ||
| Анизотропная фильтрация 2x. | ||
| Анизотропная фильтрация 4x. | ||
| Анизотропная фильтрация 8x. | ||
| Анизотропная фильтрация 16x. |
Это перечисление было введено или изменено в Qt 5.9.
Перечисление QSGTexture::Filtering
Определяет, как следует фильтровать выборку пикселей, когда координаты текстуры не выровнены по пикселям.
| Постоянная | Значение | Описание |
|---|---|---|
| Фильтрация не должна выполняться. Это значение используется только вместе с setMipmapFiltering(). | ||
| Выборка возвращает ближайший пиксель. | ||
| Выборка возвращает линейную интерполяцию соседних пикселей. |
Перечисление 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.0/qsgtexture.html