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 : |
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.
| Constante | Valeur | Description |
|---|---|---|
QSGTexture::AnisotropyNone | 0 | Pas de filtrage anisotrope. |
QSGTexture::Anisotropy2x | 1 | Filtrage anisotrope 2x. |
QSGTexture::Anisotropy4x | 2 | Filtrage anisotrope 4x. |
QSGTexture::Anisotropy8x | 3 | Filtrage anisotrope 8x. |
QSGTexture::Anisotropy16x | 4 | Filtrage 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.
| Constante | Valeur | Description |
|---|---|---|
QSGTexture::None | 0 | Aucun filtrage ne doit avoir lieu. Cette valeur n'est utilisée qu'avec la fonction ` setMipmapFiltering()`. |
QSGTexture::Nearest | 1 | La fonction `Sampling` renvoie le texel le plus proche. |
QSGTexture::Linear | 2 | La 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.
| Constante | Valeur | Description |
|---|---|---|
QSGTexture::Repeat | 0 | Seule 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::ClampToEdge | 1 | Les valeurs supérieures à 1 sont limitées à 1 et celles inférieures à 0 sont limitées à 0. |
QSGTexture::MirroredRepeat | 2 | Lorsque 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:
Permet d’accéder aux objets de texture Direct3D 11 et d’en activer l’adoption | |
Permet d'accéder aux objets de texture Direct3D 12 et d'en adopter | |
Permet d'accéder aux objets de texture Metal et d'en adopter | |
Permet d'accéder aux objets de texture OpenGL et d'en adopter | |
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.