Sur cette page

QSGTexture Class

La classe QSGTexture est la classe de base des textures utilisées dans le graphe de scène. En savoir plus...

En-tête : #include <QSGTexture>
CMake : find_package(Qt6 REQUIRED COMPONENTS Quick)
target_link_libraries(mytarget PRIVATE Qt6::Quick)
qmake : QT += quick
Hérite de : 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. L'implémentation par défaut n'est pas instanciée directement, mais est plutôt construite via des fonctions d'usine, telles que ` QQuickWindow::createTextureFromImage()`.

Avec l’implémentation par défaut, chaque `QSGTexture` s’appuie sur un ` QRhiTexture`, qui contient à son tour un objet de texture natif, tel qu’une texture OpenGL ou une image Vulkan.

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

Materials Les fonctions travaillant avec des textures réimplémentent ` updateSampledImage()` afin de fournir une logique qui détermine 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’enroulement peuvent être spécifiés à l’aide de setMipmapFiltering(), setFiltering(), setHorizontalWrapMode() et setVerticalWrapMode(). Le graphe de scène et l’abstraction graphique de Qt se chargent de créer des objets échantillonneurs distincts, le cas échéant.

Atlas de textures

Certains backends de graphe de scène utilisent des atlas de textures, regroupant plusieurs petites textures en une seule grande texture. Si tel 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 améliore les performances. Les atlas sont également essentiels pour le regroupement (fusion de géométries afin de réduire le nombre d’appels de dessin), car deux instances d’un même matériau utilisant deux QSGTextures différentes ne peuvent pas être regroupées, alors que si les deux QSGTextures font référence au même atlas, le regroupement est possible, à condition que les matériaux soient par ailleurs compatibles.

L’emplacement de la texture au sein de l’atlas est indiqué par la fonction normalizedTextureSubRect().

Si la texture est utilisée d’une manière telle que l’atlas n’est pas recommandé, la fonction removedFromAtlas() peut être utilisée pour extraire une copie non intégrée à l’atlas.

Remarque : toutes les classes préfixées par « QSG » doivent être utilisées exclusivement sur le thread de rendu du graphe de scène. Voir Graphe de scène et rendu pour plus d’informations.

Documentation sur les types de membres

enum QSGTexture::AnisotropyLevel

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

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

enum QSGTexture::Filtering

Spécifie comment le filtrage des texels doit s'effectuer lorsque les coordonnées de texture ne sont pas alignées sur les pixels.

ConstanteValeurDescription
QSGTexture::None0Aucun filtrage ne doit avoir lieu. Cette valeur n'est utilisée qu'avec la fonction ` setMipmapFiltering()`.
QSGTexture::Nearest1La fonction `Sampling` renvoie le texel le plus proche.
QSGTexture::Linear2La fonction « Sampling » renvoie une interpolation linéaire des texels 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 limitées à 1 et celles inférieures à 0 sont limité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 définie sur 1 - fractional part. Cette valeur a été introduite dans Qt 5.10.

Documentation des fonctions membres

QSGTexture::QSGTexture()

Crée la classe de base QSGTexture.

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

Supprime l'QSGTexture.

QSGTexture::AnisotropyLevel QSGTexture::anisotropyLevel() const

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

Voir aussi setAnisotropyLevel().

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

Appelez cette fonction pour mettre en file d'attente les opérations de téléchargement d'images vers resourceUpdates, s'il y en a en attente. Lorsqu'il n'y a pas de nouvelles données (par exemple, parce qu'aucun appel à setImage() n'a été effectué depuis le dernier appel à cette fonction), la fonction ne fait rien.

Les matériaux utilisant des textures provenant de rhi doivent appeler cette fonction depuis leur implémentation de updateSampledImage(), généralement sans aucune condition, en transmettant les paramètres state.rhi() et state.resourceUpdateBatch() provenant de QSGMaterialShader::RenderState.

Avertissement : cette fonction ne peut être appelée qu’à partir du thread de rendu.

Cette fonction a été introduite dans Qt 6.0.

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

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

La simple comparaison des pointeurs ` QSGTexture ` n’est pas toujours suffisante, car deux instances ` QSGTexture ` faisant référence au même objet de texture natif sous-jacent 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) s’il n’y en a pas encore.

Un ` QSGTexture ` qui ne dispose pas d’un objet de texture natif sous-jacent n’ est généralement pas égal à un autre ` QSGTexture` ; la valeur de retour doit donc être définie en conséquence. Il existe toutefois des exceptions à cette règle, notamment lorsque l’atlas est utilisé (cas où plusieurs textures partagent en arrière-plan la même texture d’atlas) ; il appartient alors aux implémentations des sous-classes de gérer cela de manière appropriée.

Avertissement : cette fonction ne peut être appelée qu’à partir du thread de rendu.

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

Renvoie l'rect, convertie 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

Renvoie « true » si les données de texture contiennent un canal alpha.

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

Renvoie « true » si les données de texture contiennent des niveaux de mipmap.

QSGTexture::WrapMode QSGTexture::horizontalWrapMode() const

Renvoie le mode de retour à la ligne 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

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

Voir également setMipmapFiltering().

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

Renvoie une interface native du type spécifié pour la texture.

Cette fonction permet d'accéder aux fonctionnalités spécifiques à la plateforme d'QSGTexture, telles que déclarées dans l'espace de noms QNativeInterface:

QNativeInterface::QSGD3D11Texture

Permet d’accéder aux objets de texture Direct3D 11 et d’en activer l’adoption

QNativeInterface::QSGD3D12Texture

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

QNativeInterface::QSGMetalTexture

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

QNativeInterface::QSGOpenGLTexture

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

QNativeInterface::QSGVulkanTexture

Permet d'accéder aux objets image Vulkan et d'en adopter

Cela permet d’accéder à l’objet de texture natif sous-jacent, tel que l’identifiant de texture « GLuint » avec OpenGL, ou le descripteur « VkImage » avec Vulkan.

Si l’interface demandée n’est pas disponible, une valeur « nullptr » est renvoyée.

[virtual] QRectF QSGTexture::normalizedTextureSubRect() const

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

L'implémentation par défaut renvoie un rectangle situé à la position (0, 0) et dont la largeur et la hauteur sont égales à 1.

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

Cette fonction renvoie une copie de la texture actuelle, qui est retirée de son atlas.

La texture actuelle reste inchangée ; il n'est donc pas nécessaire de mettre à jour les coordonnées de texture.

Le retrait d’une texture d’un atlas est particulièrement utile lorsqu’on la transmet à un shader qui opère sur les coordonnées de texture 0-1 plutôt que sur le sous-rectangle de texture situé à 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é que les implémentations de cette fonction renvoient la même instance pour plusieurs appels afin de limiter l’utilisation de la mémoire.

resourceUpdates est un lot de mise à jour de ressources facultatif, dans lequel les opérations sur les textures, le cas échéant, sont mises en file d’attente. Les matériaux peuvent récupérer une instance à partir de QSGMaterialShader::RenderState. Lorsqu’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 soumet pas le lot de mise à jour.

Avertissement : cette fonction ne peut être appelée qu’à partir du thread de rendu.

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

Renvoie l'QRhiTexture pour cet QSGTexture ou null s'il n'y en a pas (soit parce qu'aucune texture valide n'a encore été créée en interne, soit parce que le concept ne s'applique pas au backend de graphe de scène utilisé).

Cette fonction n’est pas censée créer une nouvelle texture « QRhiTexture » s’il n’y en a pas. Elle doit renvoyer null dans ce cas. On attend du moteur de rendu qu’une texture null entraîne l’utilisation d’une texture factice transparente à la place.

Avertissement : cette fonction ne peut être appelée qu’à partir du thread de rendu.

Cette fonction a été introduite dans Qt 6.0.

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

Définit le niveau de filtrage anisotrope sur « level ». La valeur par défaut est « QSGTexture::AnisotropyNone », ce qui signifie qu’aucun filtrage anisotrope n’est activé.

Remarque : la requête peut être ignorée selon l'API graphique utilisée. Il n'y a aucune garantie que le filtrage anisotrope soit pris en charge lors de l'exécution.

Voir également anisotropyLevel().

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

Définit le mode d'échantillonnage sur « filter ».

Voir également filtering().

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

Définit le mode de retour à la ligne horizontal sur hwrap

Voir aussi horizontalWrapMode().

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

Définit le mode d'échantillonnage des mipmaps sur « filter ».

La configuration du filtrage des mipmaps n'a aucun effet si la texture ne comporte pas de mipmaps.

Voir également ` mipmapFiltering()` et ` hasMipmaps()`.

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

Définit le mode de retour à la ligne vertical sur 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 de retour à la ligne 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.