Spec-Zone.ru › Qt

Класс QSGTexture

Класс QSGTexture — базовый класс для текстур, используемых в дереве сцены. Подробнее...

Заголовок: #include <QSGTexture>
CMake: find_package(Qt6 COMPONENTS Quick REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Quick)
qmake: QT += quick
Наследуется от: QObject
Наследует:

QSGDynamicTexture

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

Типы публичного доступа

Перечисление AnisotropyLevel { AnisotropyNone, Anisotropy2x, Anisotropy4x, Anisotropy8x, Anisotropy16x }
Перечисление Filtering { None, Nearest, Linear }
Перечисление WrapMode { Repeat, ClampToEdge, MirroredRepeat }

Функции публичного доступа

QSGTexture()
virtual ~QSGTexture() override
QSGTexture::AnisotropyLevel anisotropyLevel() const
virtual qint64 comparisonKey() const = 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
QNativeInterface * nativeInterface() const
virtual QRectF normalizedTextureSubRect() const
virtual 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)
virtual 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:

QNativeInterface::QSGD3D11Texture

Предоставляет доступ к и позволяет использовать объекты текстур Direct3D 11

QNativeInterface::QSGMetalTexture

Предоставляет доступ к и позволяет использовать объекты текстур Metal

QNativeInterface::QSGOpenGLTexture

Предоставляет доступ к и позволяет использовать объекты текстур OpenGL

QNativeInterface::QSGVulkanTexture

Предоставляет доступ к и позволяет использовать объекты изображений 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.2/qsgtexture.html

Spec-Zone.ru

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