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 : |
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.
| Constante | Valeur | Description |
|---|---|---|
QSGTexture::AnisotropyNone | 0 | Pas de filtrage anisotropique. |
QSGTexture::Anisotropy2x | 1 | Filtrage anisotropique 2x. |
QSGTexture::Anisotropy4x | 2 | Filtrage anisotropique 4x. |
QSGTexture::Anisotropy8x | 3 | Filtrage anisotropique 8x. |
QSGTexture::Anisotropy16x | 4 | Filtrage 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.
| Constante | Valeur | Description |
|---|---|---|
QSGTexture::None | 0 | Aucun filtrage n'est effectué. Cette valeur n'est utilisée qu'avec setMipmapFiltering(). |
QSGTexture::Nearest | 1 | L'échantillonnage renvoie le texel le plus proche. |
QSGTexture::Linear | 2 | L'échantillonnage renvoie une interpolation linéaire des pixels 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 bloquées à 1 et les valeurs inférieures à 0 sont bloqué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 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:
Permet d'accéder aux objets de texture Direct3D 11 et de les adopter. | |
Permet d'accéder aux objets de texture Direct3D 12 et de les adopter. | |
Permet d'accéder aux objets de texture Metal et de les adopter. | |
Permet l'accès et l'adoption des objets de texture OpenGL | |
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.