Sur cette page

QSGTexture Class

La classe QSGTexture est la classe de base pour les textures utilisées dans le graphe de scène. Plus d'informations...

En-tête : #include <QSGTexture>
CMake : find_package(Qt6 REQUIRED COMPONENTS Quick)
target_link_libraries(mytarget PRIVATE Qt6::Quick)
qmake : QT += quick
Hérite : QObject
Hérité par :

QSGDynamicTexture

Types publics

enum AnisotropyLevel { AnisotropyNone, Anisotropy2x, Anisotropy4x, Anisotropy8x, Anisotropy16x }
enum Filtering { None, Nearest, Linear }
enum WrapMode { Repeat, ClampToEdge, MirroredRepeat }

Fonctions publiques

QSGTexture()
virtual ~QSGTexture() override
QSGTexture::AnisotropyLevel anisotropyLevel() const
(since 6.0) virtual void commitTextureOperations(QRhi *rhi, QRhiResourceUpdateBatch *resourceUpdates)
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
(since 6.0) virtual QRhiTexture *rhiTexture() 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

Description détaillée

Les utilisateurs peuvent librement implémenter leurs propres classes de textures pour prendre en charge des textures d'entrée arbitraires, telles que des images vidéo YUV ou des masques alpha 8 bits. Le graphe de scène fournit une implémentation par défaut pour les textures RGBA, qui ne sont pas instanciées directement, mais construites via des fonctions d'usine, telles que QQuickWindow::createTextureFromImage().

Avec l'implémentation par défaut, chaque QSGTexture est soutenue par un QRhiTexture, qui contient à son tour un objet de texture natif, comme une texture OpenGL ou une image Vulkan.

La taille en pixels est donnée par textureSize(). hasAlphaChannel() indique si la texture contient des valeurs d'opacité et hasMipmaps() indique si la texture contient des niveaux de mipmap.

Materials Les fonctions qui travaillent avec des textures réimplémentent updateSampledImage() pour fournir une logique qui décide quelle texture native sous-jacente de QSGTexture doit être exposée à un point de liaison de ressource de shader donné.

QSGTexture ne sépare pas les objets image (texture) et échantillonneur. Les paramètres de filtrage et d'enveloppement peuvent être spécifiés avec setMipmapFiltering(), setFiltering(), setHorizontalWrapMode() et setVerticalWrapMode(). Le graphe de scène et l'abstraction graphique de Qt Graphs se chargent de créer des objets d'échantillonnage séparés, le cas échéant.

Atlas de textures

Certains backends de graphes de scènes utilisent des atlas de textures, regroupant plusieurs petites textures en une seule grande texture. Si c'est le cas, la fonction isAtlasTexture() renverra true. Les atlas sont utilisés pour aider l'algorithme de rendu à effectuer un meilleur tri, ce qui augmente les performances. Les atlas sont également essentiels pour la mise en lots (fusion de géométries pour réduire le nombre d'appels de dessin), car deux instances du même matériau utilisant deux QSGTextures différentes ne peuvent pas être mises en lots, alors que si les deux QSGTextures font référence au même atlas, la mise en lots peut avoir lieu, en supposant que les matériaux sont par ailleurs compatibles.

L'emplacement de la texture dans l'atlas est indiqué par la fonction normalizedTextureSubRect().

Si la texture est utilisée de telle manière que l'atlas n'est pas préférable, la fonction removedFromAtlas() peut être utilisée pour extraire une copie non atlasée.

Note : Toutes les classes avec le préfixe QSG doivent être utilisées uniquement sur le thread de rendu du graphe de scène. Voir Graphique de scène et rendu pour plus d'informations.

Documentation des types de membres

enum QSGTexture::AnisotropyLevel

Spécifie le niveau de filtrage anisotropique à utiliser lorsque la texture n'est pas alignée sur l'écran.

ConstanteValeurDescription
QSGTexture::AnisotropyNone0Pas de filtrage anisotropique.
QSGTexture::Anisotropy2x1Filtrage anisotropique 2x.
QSGTexture::Anisotropy4x2Filtrage anisotropique 4x.
QSGTexture::Anisotropy8x3Filtrage anisotropique 8x.
QSGTexture::Anisotropy16x4Filtrage anisotropique 16x.

enum QSGTexture::Filtering

Spécifie comment l'échantillonnage des texels doit être filtré lorsque les coordonnées des textures ne sont pas alignées sur les pixels.

ConstanteValeurDescription
QSGTexture::None0Aucun filtrage n'est effectué. Cette valeur n'est utilisée qu'avec setMipmapFiltering().
QSGTexture::Nearest1L'échantillonnage renvoie le texel le plus proche.
QSGTexture::Linear2L'échantillonnage renvoie une interpolation linéaire des pixels voisins.

enum QSGTexture::WrapMode

Spécifie comment l'échantillonneur doit traiter les coordonnées de texture.

ConstanteValeurDescription
QSGTexture::Repeat0Seule la partie fractionnaire de la coordonnée de texture est utilisée, ce qui entraîne la répétition des valeurs supérieures à 1 et inférieures à 0.
QSGTexture::ClampToEdge1Les valeurs supérieures à 1 sont bloquées à 1 et les valeurs inférieures à 0 sont bloquées à 0.
QSGTexture::MirroredRepeat2Lorsque la coordonnée de texture est paire, seule la partie fractionnaire est utilisée. Lorsqu'elle est impaire, la coordonnée de texture est fixée à 1 - fractional part. Cette valeur a été introduite dans Qt 5.10.

Documentation des fonctions membres

QSGTexture::QSGTexture()

Construit la classe de base QSGTexture.

[override virtual noexcept] QSGTexture::~QSGTexture()

Détruit le site QSGTexture.

QSGTexture::AnisotropyLevel QSGTexture::anisotropyLevel() const

Renvoie le niveau d'anisotropie utilisé pour filtrer cette texture.

Voir aussi setAnisotropyLevel().

[virtual, since 6.0] void QSGTexture::commitTextureOperations(QRhi *rhi, QRhiResourceUpdateBatch *resourceUpdates)

Cette fonction est appelée pour mettre en file d'attente les opérations de téléchargement d'images vers resourceUpdates, au cas où il y en aurait en attente. S'il n'y a pas de nouvelles données (par exemple, parce qu'il n'y a pas eu de setImage() depuis le dernier appel à cette fonction), la fonction ne fait rien.

Les matériaux impliquant des textures rhi sont censés appeler cette fonction à partir de leur implémentation updateSampledImage(), généralement sans aucune condition, en transmettant state.rhi() et state.resourceUpdateBatch() à partir de QSGMaterialShader::RenderState.

Attention : Cette fonction ne peut être appelée qu'à partir du fil de rendu.

Cette fonction a été introduite dans Qt 6.0.

[pure virtual] qint64 QSGTexture::comparisonKey() const

Renvoie une clé permettant de comparer les textures. Généralement utilisé dans les implémentations de QSGMaterial::compare().

La simple comparaison des pointeurs QSGTexture n'est pas toujours suffisante, car deux instances QSGTexture qui font référence au même objet de texture natif en dessous doivent également être considérées comme égales. D'où la nécessité de cette fonction.

Les implémentations de cette fonction ne sont pas censées et ne doivent pas créer de ressources graphiques (objets de texture natifs) au cas où il n'y en aurait pas encore.

Un site QSGTexture qui n'a pas d'objet de texture natif en dessous n' est généralement pas égal à un autre site QSGTexture, et la valeur de retour doit donc être élaborée en conséquence. Il existe des exceptions à cette règle, notamment en cas d'utilisation de l'atlas (lorsque plusieurs textures partagent la même texture atlas sous le capot), qu'il appartient alors aux implémentations des sous-classes de gérer comme il convient.

Attention : Cette fonction ne peut être appelée qu'à partir du thread de rendu.

QRectF QSGTexture::convertToNormalizedSourceRect(const QRectF &rect) const

Retourne rect converti en coordonnées normalisées.

Voir aussi normalizedTextureSubRect().

QSGTexture::Filtering QSGTexture::filtering() const

Renvoie le mode d'échantillonnage à utiliser pour cette texture.

Voir aussi setFiltering().

[pure virtual] bool QSGTexture::hasAlphaChannel() const

Retourne vrai si les données de texture contiennent un canal alpha.

[pure virtual] bool QSGTexture::hasMipmaps() const

Retourne vrai si les données de texture contiennent des niveaux de mipmap.

QSGTexture::WrapMode QSGTexture::horizontalWrapMode() const

Renvoie le mode d'habillage horizontal à utiliser pour cette texture.

Voir également setHorizontalWrapMode().

[virtual] bool QSGTexture::isAtlasTexture() const

Indique si cette texture fait partie d'un atlas ou non.

L'implémentation par défaut renvoie false.

QSGTexture::Filtering QSGTexture::mipmapFiltering() const

Renvoie si le mipmapping doit être utilisé lors de l'échantillonnage de cette texture.

Voir aussi setMipmapFiltering().

template <typename QNativeInterface> QNativeInterface *QSGTexture::nativeInterface() const

Renvoie une interface native du type donné pour la texture.

Cette fonction permet d'accéder aux fonctionnalités spécifiques à la plate-forme QSGTexture, telles qu'elles sont déclarées dans l'espace de noms QNativeInterface:

QNativeInterface::QSGD3D11Texture

Permet d'accéder aux objets de texture Direct3D 11 et de les adopter.

QNativeInterface::QSGD3D12Texture

Permet d'accéder aux objets de texture Direct3D 12 et de les adopter.

QNativeInterface::QSGMetalTexture

Permet d'accéder aux objets de texture Metal et de les adopter.

QNativeInterface::QSGOpenGLTexture

Permet l'accès et l'adoption des objets de texture OpenGL

QNativeInterface::QSGVulkanTexture

Permet d'accéder aux objets de texture OpenGL et de les adopter.

Cela permet d'accéder à l'objet de texture natif sous-jacent, tel que l'ID de texture GLuint avec OpenGL, ou le handle VkImage avec Vulkan.

Si l'interface demandée n'est pas disponible, une adresse nullptr est renvoyée.

[virtual] QRectF QSGTexture::normalizedTextureSubRect() const

Renvoie le rectangle à l'intérieur de textureSize() que cette texture représente en coordonnées normalisées.

L'implémentation par défaut renvoie un rectangle à la position (0, 0) avec une largeur et une hauteur de 1.

[virtual] QSGTexture *QSGTexture::removedFromAtlas(QRhiResourceUpdateBatch *resourceUpdates = nullptr) const

Cette fonction renvoie une copie de la texture courante qui est supprimée de son atlas.

La texture courante reste inchangée, les coordonnées de la texture n'ont donc pas besoin d'être mises à jour.

La suppression d'une texture d'un atlas est principalement utile lorsqu'il s'agit de la passer à un shader qui opère sur les coordonnées de texture 0-1 au lieu du sous-répertoire de texture à l'intérieur de l'atlas.

Si la texture ne fait pas partie d'un atlas de textures, cette fonction renvoie 0.

Il est recommandé aux implémentations de cette fonction de renvoyer la même instance pour plusieurs appels afin de limiter l'utilisation de la mémoire.

resourceUpdates est un lot facultatif de mise à jour de la ressource, sur lequel les opérations de texture, le cas échéant, sont mises en file d'attente. Les matériaux peuvent récupérer une instance à partir de QSGMaterialShader::RenderState. Si elle est nulle, l'implémentation de removedFromAtlas() crée son propre lot et le soumet immédiatement. Cependant, lorsqu'une instance valide est spécifiée, cette fonction ne soumettra pas le lot de mise à jour.

Attention : Cette fonction ne peut être appelée qu'à partir du thread de rendu.

[virtual, since 6.0] QRhiTexture *QSGTexture::rhiTexture() const

Renvoie le site QRhiTexture pour ce site QSGTexture ou null s'il n'y en a pas (soit parce qu'une texture valide n'a pas encore été créée en interne, soit parce que le concept n'est pas applicable au backend scenegraph utilisé).

Cette fonction n'est pas censée créer une nouvelle QRhiTexture s'il n'y en a pas. Elle doit renvoyer null dans ce cas. Le moteur de rendu s'attend à ce qu'une texture nulle entraîne l'utilisation d'une texture transparente et fictive à la place.

Attention : Cette fonction ne peut être appelée qu'à partir du fil de rendu.

Cette fonction a été introduite dans Qt 6.0.

void QSGTexture::setAnisotropyLevel(QSGTexture::AnisotropyLevel level)

Définit le niveau de filtrage anisotropique à level. La valeur par défaut est QSGTexture::AnisotropyNone, ce qui signifie qu'aucun filtrage anisotropique n'est activé.

Remarque : la demande peut être ignorée en fonction de l'API graphique utilisée. Il n'y a aucune garantie que le filtrage anisotropique soit pris en charge au moment de l'exécution.

Voir également anisotropyLevel().

void QSGTexture::setFiltering(QSGTexture::Filtering filter)

Définit le mode d'échantillonnage à filter.

Voir aussi filtering().

void QSGTexture::setHorizontalWrapMode(QSGTexture::WrapMode hwrap)

Définit le mode d'habillage horizontal à hwrap

Voir aussi horizontalWrapMode().

void QSGTexture::setMipmapFiltering(QSGTexture::Filtering filter)

Définit le mode d'échantillonnage de la mipmap à filter.

La définition du filtrage de la mipmap n'a aucun effet si la texture n'a pas de mipmap.

Voir aussi mipmapFiltering() et hasMipmaps().

void QSGTexture::setVerticalWrapMode(QSGTexture::WrapMode vwrap)

Définit le mode d'enroulement vertical à vwrap

Voir aussi verticalWrapMode().

[pure virtual] QSize QSGTexture::textureSize() const

Renvoie la taille de la texture en pixels.

QSGTexture::WrapMode QSGTexture::verticalWrapMode() const

Renvoie le mode d'enveloppement vertical à utiliser pour cette texture.

Voir aussi setVerticalWrapMode().

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.