QRhiTexture Class
Ressource de texture. En savoir plus…
| En-tête : | #include <rhi/qrhi.h> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS GuiPrivate) target_link_libraries(mytarget PRIVATE Qt6::GuiPrivate) |
| qmake : | QT += gui-private |
| Depuis : | Qt 6.6 |
| Hérite de : | QRhiResource |
Types publics
| struct | NativeTexture |
(since 6.8) struct | ViewFormat |
| enum | Flag { RenderTarget, CubeMap, MipMapped, sRGB, UsedAsTransferSource, …, UsedAsShadingRateMap } |
| flags | Flags |
| enum | Format { UnknownFormat, RGBA8, BGRA8, R8, RG8, …, RGBA32SI } |
Fonctions publiques
| int | arrayRangeLength() const |
| int | arrayRangeStart() const |
| int | arraySize() const |
| virtual bool | create() = 0 |
| virtual bool | createFrom(QRhiTexture::NativeTexture src) |
| int | depth() const |
| QRhiTexture::Flags | flags() const |
| QRhiTexture::Format | format() const |
| virtual QRhiTexture::NativeTexture | nativeTexture() |
| QSize | pixelSize() const |
(since 6.8) QRhiTexture::ViewFormat | readViewFormat() const |
| int | sampleCount() const |
| void | setArrayRange(int startIndex, int count) |
| void | setArraySize(int arraySize) |
| void | setDepth(int depth) |
| void | setFlags(QRhiTexture::Flags f) |
| void | setFormat(QRhiTexture::Format fmt) |
| virtual void | setNativeLayout(int layout) |
| void | setPixelSize(const QSize &sz) |
(since 6.8) void | setReadViewFormat(const QRhiTexture::ViewFormat &fmt) |
| void | setSampleCount(int s) |
(since 6.8) void | setWriteViewFormat(const QRhiTexture::ViewFormat &fmt) |
(since 6.8) QRhiTexture::ViewFormat | writeViewFormat() const |
Fonctions publiques réimplémentées
| virtual QRhiResource::Type | resourceType() const override |
Description détaillée
Un objet QRhiTexture encapsule un objet de texture natif, tel qu’un VkImage ou un MTLTexture.
Une instance de QRhiTexture est toujours créée en appelant the QRhi's newTexture() function. Cela ne crée aucune ressource graphique native. Pour ce faire, appelez create() après avoir défini les options appropriées, telles que le format et la taille, bien que dans la plupart des cas, celles-ci soient déjà définies en fonction des arguments passés à newTexture().
Il est essentiel de définir correctement ` flags `, faute de quoi diverses erreurs peuvent se produire en fonction du backend ` QRhi ` sous-jacent et de l’API graphique. Par exemple, lorsqu’une texture doit être rendue à partir d’un passage de rendu via ` QRhiTextureRenderTarget`, elle doit être créée avec le drapeau ` RenderTarget ` activé. De même, lorsque la texture doit être soumise à un mipmapping ( read back), le drapeau ` UsedAsTransferSource ` doit être activé au préalable. Les textures mipmappées doivent avoir le drapeau « MipMapped » activé. Et ainsi de suite. Il n’est pas possible de modifier les drapeaux une fois que la fonction ` create()` a abouti. Pour libérer l’objet de texture existant et en créer un nouveau avec les paramètres modifiés, appelez les méthodes de configuration, puis appelez à nouveau ` create()`. Cette opération peut alors s’avérer coûteuse en ressources.
Exemple d'utilisation
Pour créer une texture 2D de taille 512x512 pixels et définir son contenu en vert :
QRhiTexture *texture = rhi->newTexture(QRhiTexture::RGBA8, QSize(512, 512));
if (!texture->create()) { error(); }
QRhiResourceUpdateBatch *batch = rhi->nextResourceUpdateBatch();
QImage image(512, 512, QImage::Format_RGBA8888);
image.fill(Qt::green);
batch->uploadTexture(texture, image);
// ...
commandBuffer->resourceUpdate(batch); // or, alternatively, pass 'batch' to a beginPass() callModèles courants
Un appel à ` create()` détruit toutes les ressources natives existantes si ` create()` a été appelé avec succès auparavant. Si ces ressources natives sont toujours utilisées par une image en cours de traitement (c’est-à-dire s’il est possible qu’elles soient encore lues par le GPU), leur destruction est automatiquement reportée. Ainsi, le modèle suivant est très courant et pratique pour modifier en toute sécurité la taille d’une texture existante. En pratique, cela supprime et crée une toute nouvelle ressource de texture native en arrière-plan, ce n’est donc pas nécessairement une opération peu coûteuse, mais elle est plus pratique et tout de même plus rapide que les alternatives, car en ne détruisant pas l’objet ` texture ` lui-même, toutes les références à celui-ci restent valides dans d’autres structures de données (par exemple, dans tout `QShaderResourceBinding` à partir duquel le `QRhiTexture` est référencé).
// determine newSize, e.g. based on the swapchain's output size or other factors
if (texture->pixelSize() != newSize) {
texture->setPixelSize(newSize);
if (!texture->create()) { error(); }
}
// continue using texture, fill it with new dataRemarque : il s’agit d’une API RHI dont la compatibilité n’est pas entièrement garantie ; voir QRhi pour plus de détails.
Voir également QRhiResourceUpdateBatch, QRhi et QRhiTextureRenderTarget.
Documentation sur les types de membres
enum QRhiTexture::Flag
flags QRhiTexture::Flags
Les indicateurs permettent de spécifier comment la texture sera utilisée. Le non-respect des indicateurs définis avant l'appel à ` create()` et toute tentative d'utilisation de la texture d'une manière non déclarée au préalable peuvent entraîner un comportement indéfini ou une baisse des performances, selon le backend et l'API graphique sous-jacente.
| Constante | Valeur | Description |
|---|---|---|
QRhiTexture::RenderTarget | 1 << 0 | La texture qui sera utilisée en combinaison avec QRhiTextureRenderTarget. |
QRhiTexture::CubeMap | 1 << 2 | La texture est une carte cubique. Ces textures comportent 6 couches, une pour chaque face dans l’ordre +X, -X, +Y, -Y, +Z, -Z. Les textures de carte cubique ne peuvent pas être multisampling. |
QRhiTexture::MipMapped | 1 << 3 | La texture comporte des mipmaps. Le nombre approprié de mipmaps est calculé automatiquement et peut également être récupéré via QRhi::mipLevelsForSize(). Les images correspondant aux différents niveaux de mipmaps doivent être fournies dans la texture téléchargée ou générées via QRhiResourceUpdateBatch::generateMips(). Les textures multi-échantillonnées ne peuvent pas comporter de mipmaps. |
QRhiTexture::sRGB | 1 << 4 | Utilisez un format sRGB. |
QRhiTexture::UsedAsTransferSource | 1 << 5 | La texture est utilisée comme source pour une copie ou une relecture de texture, ce qui signifie qu’elle est indiquée comme source dans les fonctions QRhiResourceUpdateBatch::copyTexture() ou QRhiResourceUpdateBatch::readBackTexture(). |
QRhiTexture::UsedWithGenerateMips | 1 << 6 | La texture va être utilisée avec la fonction QRhiResourceUpdateBatch::generateMips(). |
QRhiTexture::UsedWithLoadStore | 1 << 7 | La texture va être utilisée avec des opérations de chargement/enregistrement d’images, par exemple dans un shader de calcul. |
QRhiTexture::UsedAsCompressedAtlas | 1 << 8 | La texture est au format compressé et les dimensions des sous-ressources chargées peuvent ne pas correspondre à la taille de la texture. |
QRhiTexture::ExternalOES | 1 << 9 | La texture doit utiliser la cible GL_TEXTURE_EXTERNAL_OES avec OpenGL. Cet indicateur est ignoré avec les autres API graphiques. |
QRhiTexture::ThreeDimensional | 1 << 10 | La texture est une texture 3D. Ces textures doivent être créées à l’aide de la surcharge de la fonction ` QRhi::newTexture()` qui prend en compte la profondeur en plus de la largeur et de la hauteur. Une texture 3D peut comporter des mipmaps, mais ne peut pas être multisample. Lors du rendu ou du chargement de données dans une texture 3D, l’ layer e spécifiée dans l’attachement de couleur de la cible de rendu ou dans la description du chargement fait référence à une seule tranche comprise dans l’intervalle [0..depth-1]. L’API graphique sous-jacente peut ne pas prendre en charge les textures 3D lors de l’exécution. La prise en charge est indiquée par la fonctionnalité « QRhi::ThreeDimensionalTextures ». |
QRhiTexture::TextureRectangleGL | 1 << 11 | La texture doit utiliser la cible GL_TEXTURE_RECTANGLE avec OpenGL. Ce drapeau est ignoré avec d’autres API graphiques. Tout comme ExternalOES, ce drapeau est utile lorsque l’on travaille avec des API de plateforme où les objets de texture OpenGL natifs reçus de la plateforme sont encapsulés dans un ` QRhiTexture`, et où la plateforme ne peut fournir que des textures pour une cible de texture non 2D. |
QRhiTexture::TextureArray | 1 << 12 | La texture est un tableau de textures, c'est-à-dire un objet de texture unique qui est un tableau homogène de textures 2D. Les tableaux de textures sont créés à l’aide de la fonction ` QRhi::newTextureArray()`. L’API graphique sous-jacente peut ne pas prendre en charge les objets de type tableau de textures lors de l’exécution. La prise en charge est indiquée par la fonctionnalité « QRhi::TextureArrays ». Lors du rendu dans un tableau de textures ou du chargement de données vers celui-ci, l’ layer spécifiée dans l’attachement de couleur de la cible de rendu ou dans la description du chargement sélectionne un élément unique du tableau. |
QRhiTexture::OneDimensional | 1 << 13 | La texture est une texture unidimensionnelle. De telles textures peuvent être créées en passant une hauteur et une profondeur égales à 0 à la fonction ` QRhi::newTexture()`. Notez qu’il peut exister des limitations concernant les textures unidimensionnelles selon l’API graphique sous-jacente. Par exemple, le rendu sur ces textures ou leur utilisation avec un filtrage basé sur des mipmaps peut ne pas être pris en charge. Ceci est indiqué par les indicateurs de fonctionnalité ` QRhi::OneDimensionalTextures ` et ` QRhi::OneDimensionalTextureMipmaps `. |
QRhiTexture::UsedAsShadingRateMap | 1 << 14 |
Le type Flags est un typedef pour QFlags<Flag>. Il stocke une combinaison OR de valeurs Flag.
enum QRhiTexture::Format
Spécifie le format de texture. Voir également QRhi::isTextureFormatSupported() et noter que flags() peut modifier le format lorsque QRhiTexture::sRGB est défini.
| Constante | Valeur | Description |
|---|---|---|
QRhiTexture::UnknownFormat | 0 | Format non valide. Ne peut pas être transmis à la fonction setFormat(). |
QRhiTexture::RGBA8 | 1 | Quatre composantes, normalisées sans signe, 8 bits par composante. Toujours pris en charge. (32 bits au total) |
QRhiTexture::BGRA8 | 2 | Quatre composantes, normalisées sans signe, 8 bits par composante. (32 bits au total) |
QRhiTexture::R8 | 3 | Une composante, normalisée sans signe de 8 bits. (8 bits au total) |
QRhiTexture::RG8 | 4 | Deux composantes, normalisées sans signe de 8 bits. (16 bits au total) |
QRhiTexture::R16 | 5 | Une composante, normalisée sans signe de 16 bits. (16 bits au total) |
QRhiTexture::RG16 | 6 | Deux composantes, normalisées sans signe de 16 bits. (32 bits au total) |
QRhiTexture::RED_OR_ALPHA8 | 7 | Soit identique à R8, soit un format similaire avec la composante permutée vers l'alpha, selon l'RedOrAlpha8IsRed. (8 bits au total) |
QRhiTexture::RGBA16F | 8 | Quatre composantes, nombre à virgule flottante de 16 bits. (64 bits au total) |
QRhiTexture::RGBA32F | 9 | Quatre composantes, nombre à virgule flottante de 32 bits. (128 bits au total) |
QRhiTexture::R16F | 10 | Une composante, nombre à virgule flottante de 16 bits. (16 bits au total) |
QRhiTexture::R32F | 11 | Une composante, nombre à virgule flottante de 32 bits. (32 bits au total) |
QRhiTexture::RGB10A2 | 12 | Quatre composantes : R, G et B normalisés sans signe sur 10 bits, alpha sur 2 bits. Il s’agit d’un format compacté ; l’endianness native s’applique donc. Notez qu’il n’existe pas de format BGR10A2. En effet, le format RGB10A2 correspond à DXGI_FORMAT_R10G10B10A2_UNORM avec D3D, à MTLPixelFormatRGB10A2Unorm avec Metal, VK_FORMAT_A2B10G10R10_UNORM_PACK32 avec Vulkan, et GL_RGB10_A2/GL_RGB/GL_UNSIGNED_INT_2_10_10_10_REV sur OpenGL (ES). Il s'agit de la seule option RGB30 prise en charge universellement. Les formats d'QImage s correspondants sont QImage::Format_BGR30 et QImage::Format_A2BGR30_Premultiplied. (32 bits au total) |
QRhiTexture::D16 | 21 | Profondeur de 16 bits (entier non signé normalisé) |
QRhiTexture::D24 | 22 | Profondeur de 24 bits (entier normalisé sans signe) |
QRhiTexture::D24S8 | 23 | Profondeur de 24 bits (entier non signé normalisé), stencil de 8 bits |
QRhiTexture::D32F | 24 | Profondeur de 32 bits (nombre à virgule flottante de 32 bits) |
QRhiTexture::D32FS8 (since Qt 6.9) | 25 | Profondeur de 32 bits (nombre à virgule flottante de 32 bits), stencil de 8 bits, 24 bits inutilisés (64 bits au total) |
QRhiTexture::BC1 | 26 | |
QRhiTexture::BC2 | 27 | |
QRhiTexture::BC3 | 28 | |
QRhiTexture::BC4 | 29 | |
QRhiTexture::BC5 | 30 | |
QRhiTexture::BC6H | 31 | |
QRhiTexture::BC7 | 32 | |
QRhiTexture::ETC2_RGB8 | 33 | |
QRhiTexture::ETC2_RGB8A1 | 34 | |
QRhiTexture::ETC2_RGBA8 | 35 | |
QRhiTexture::ASTC_4x4 | 36 | |
QRhiTexture::ASTC_5x4 | 37 | |
QRhiTexture::ASTC_5x5 | 38 | |
QRhiTexture::ASTC_6x5 | 39 | |
QRhiTexture::ASTC_6x6 | 40 | |
QRhiTexture::ASTC_8x5 | 41 | |
QRhiTexture::ASTC_8x6 | 42 | |
QRhiTexture::ASTC_8x8 | 43 | |
QRhiTexture::ASTC_10x5 | 44 | |
QRhiTexture::ASTC_10x6 | 45 | |
QRhiTexture::ASTC_10x8 | 46 | |
QRhiTexture::ASTC_10x10 | 47 | |
QRhiTexture::ASTC_12x10 | 48 | |
QRhiTexture::ASTC_12x12 | 49 | |
QRhiTexture::R8UI (since Qt 6.9) | 17 | Un composant, 8 bits non signés. (8 bits au total) |
QRhiTexture::R32UI (since Qt 6.9) | 18 | Une composante, 32 bits sans signe. (32 bits au total) |
QRhiTexture::RG32UI (since Qt 6.9) | 19 | Deux composantes, 32 bits sans signe. (64 bits au total) |
QRhiTexture::RGBA32UI (since Qt 6.9) | 20 | Quatre composantes, 32 bits sans signe. (128 bits au total) |
QRhiTexture::R8SI (since Qt 6.10) | 13 | Une composante, 8 bits avec signe. (8 bits au total) |
QRhiTexture::R32SI (since Qt 6.10) | 14 | Une composante, signée, de 32 bits. (32 bits au total) |
QRhiTexture::RG32SI (since Qt 6.10) | 15 | Deux composantes, 32 bits avec signe. (64 bits au total) |
QRhiTexture::RGBA32SI (since Qt 6.10) | 16 | Quatre composantes, 32 bits non signés. (128 bits au total) |
Documentation des fonctions membres
int QRhiTexture::arrayRangeLength() const
Renvoie la taille de la plage de l'array exposée lors de l'appel de la fonction setArrayRange().
Voir également ` setArrayRange()`.
int QRhiTexture::arrayRangeStart() const
Renvoie la première couche de tableau lorsque la fonction ` setArrayRange()` a été appelée.
Voir aussi setArrayRange().
int QRhiTexture::arraySize() const
Renvoie la taille du tableau de textures.
Voir également setArraySize().
[pure virtual] bool QRhiTexture::create()
Crée les ressources graphiques natives correspondantes. Si des ressources existent déjà suite à un appel antérieur à `create()` sans ` destroy()` correspondant, alors la fonction ` destroy()` est d’abord appelée implicitement.
Renvoie ` true ` en cas de succès, et ` false ` lorsqu’une opération graphique a échoué. Quelle que soit la valeur renvoyée, l’appel à ` destroy()` est toujours sans risque.
[virtual] bool QRhiTexture::createFrom(QRhiTexture::NativeTexture src)
Similaire à ` create()`, à la différence qu'aucune nouvelle texture native n'est créée. À la place, les ressources de texture natives spécifiées par ` src ` sont utilisées.
Cela permet d’importer un objet de texture native existant (qui doit appartenir au même périphérique ou au même contexte de partage, selon l’API graphique) depuis un moteur graphique externe.
Renvoie « true » si l’objet de texture native existant spécifié a bien été encapsulé en tant qu’ QRhiTexture non propriétaire.
Remarque : les fonctions format(), pixelSize(), sampleCount() et flags() doivent tout de même être définies correctement. Transmettre des tailles et autres valeurs incorrectes à QRhi::newTexture(), puis enchaîner avec un appel à createFrom() en espérant que l’objet de texture natif suffise à lui seul à déduire ces valeurs est une erreur qui entraînera des problèmes.
Remarque : la fonction ` QRhiTexture ` ne prend pas possession de l’objet texture. La fonction ` destroy()` ne libère ni l’objet ni la mémoire qui lui est associée.
L’opération inverse, consistant à exposer un objet de texture natif créé par QRhiTexture à un moteur tiers, est possible via nativeTexture().
Remarque : lors de l'importation d'une texture 3D, d'un objet de tableau de textures ou, avec OpenGL ES, d'une texture externe, il est particulièrement important de définir les indicateurs correspondants (ThreeDimensional, TextureArray, ExternalOES) via setFlags() avant d'appeler cette fonction.
int QRhiTexture::depth() const
Renvoie la profondeur des textures 3D.
Voir aussi setDepth().
QRhiTexture::Flags QRhiTexture::flags() const
Renvoie les indicateurs de texture.
Voir aussi ` setFlags()`.
QRhiTexture::Format QRhiTexture::format() const
Renvoie le format de texture.
Voir aussi setFormat().
[virtual] QRhiTexture::NativeTexture QRhiTexture::nativeTexture()
Renvoie les ressources natives sous-jacentes de cette texture. La valeur renvoyée sera vide si l'exposition des ressources natives sous-jacentes n'est pas prise en charge par le backend.
Voir également createFrom().
QSize QRhiTexture::pixelSize() const
Renvoie la taille en pixels.
Voir aussi setPixelSize().
[since 6.8] QRhiTexture::ViewFormat QRhiTexture::readViewFormat() const
Renvoie le format de vue utilisé lors de l'échantillonnage de la texture. Si cette fonction n'est pas appelée, le format de vue est considéré comme étant identique à celui de la fonction ` format()`.
Cette fonction a été introduite dans Qt 6.8.
Voir également setReadViewFormat().
[override virtual] QRhiResource::Type QRhiTexture::resourceType() const
Réimplémente : ` QRhiResource::resourceType()` const.
Renvoie le type de ressource.
int QRhiTexture::sampleCount() const
Renvoie le nombre d'échantillons. La valeur 1 indique qu'il n'y a pas d'anticrénelage multi-échantillon.
Voir également setSampleCount().
void QRhiTexture::setArrayRange(int startIndex, int count)
En règle générale, toutes les couches du tableau sont exposées et c'est au shader de sélectionner la couche via la troisième coordonnée transmise à la fonction GLSL ` texture() ` lors de l'échantillonnage de ` sampler2DArray`. Lorsque ` QRhi::TextureArrayRange ` est signalé comme pris en charge, l'appel de `setArrayRange()` avant ` create()` ou ` createFrom()` permet de sélectionner uniquement la plage spécifiée, soit ` count ` éléments à partir de ` startIndex`. La logique du shader peut alors être écrite en tenant compte de cela.
Voir également QRhi::TextureArrayRange.
void QRhiTexture::setArraySize(int arraySize)
Définit la texture arraySize.
Voir aussi arraySize().
void QRhiTexture::setDepth(int depth)
Définit l'depth e d'une texture 3D.
Voir également depth().
void QRhiTexture::setFlags(QRhiTexture::Flags f)
Définit les indicateurs de texture sur « f ».
Voir aussi flags().
void QRhiTexture::setFormat(QRhiTexture::Format fmt)
Définit le format de texture demandé sur « fmt ».
Remarque : la valeur définie n’est prise en compte qu’au prochain appel à la fonction ` create()`, c’est-à-dire lorsque la ressource graphique sous-jacente est (re)créée. Dans le cas contraire, définir une nouvelle valeur est inutile et doit être évité, car cela peut entraîner un état incohérent.
Voir aussi format().
[virtual] void QRhiTexture::setNativeLayout(int layout)
Avec certaines API graphiques, telles que Vulkan, l’intégration d’un code de rendu personnalisé utilisant directement l’API graphique nécessite une attention particulière en ce qui concerne la disposition des images. Cette fonction permet de spécifier l’ layout attendue dans laquelle se trouve l’image sous-jacente de l’ QRhiTexture après l’exécution des commandes de rendu natives.
QRhiTexturePrenons par exemple le cas d’un rendu directement dans le `VkImage` d’une ` QRhiCommandBuffer::beginExternal` à l’aide de Vulkan, dans un bloc de code encadré par les fonctions ` ()` et ` QRhiCommandBuffer::endExternal()`, suivi de l’utilisation de cette image pour l’échantillonnage de texture dans un passage de rendu basé sur ` QRhi`. Afin d’éviter des transitions de disposition d’image potentiellement incorrectes, cette fonction peut être utilisée pour indiquer quelle sera la disposition de l’image une fois que les commandes enregistrées dans ledit bloc de code auront été exécutées.
L'appel de cette fonction n'a de sens qu'après QRhiCommandBuffer::endExternal() et avant un QRhiCommandBuffer::beginPass() suivant.
Cette fonction n’a aucun effet avec les backends « QRhi » où l’API graphique sous-jacente ne prend pas en charge le concept de disposition d’image.
Remarque : avec Vulkan, ` layout ` est un ` VkImageLayout`. Avec Direct 3D 12, ` layout ` est une valeur composée des bits de ` D3D12_RESOURCE_STATES`.
void QRhiTexture::setPixelSize(const QSize &sz)
Définit la taille de la texture, exprimée en pixels, à l'aide de la fonction ` sz`.
Remarque : la valeur définie n’est prise en compte qu’au prochain appel à la fonction create(), c’est-à-dire lorsque la ressource graphique sous-jacente est (re)créée. Dans le cas contraire, définir une nouvelle valeur est inutile et doit être évité, car cela peut entraîner un état incohérent. Il en va de même pour toutes les autres fonctions de définition.
Voir également pixelSize().
[since 6.8] void QRhiTexture::setReadViewFormat(const QRhiTexture::ViewFormat &fmt)
Définit le format d'affichage de la ressource de shader (ou le format de la vue utilisée pour l'échantillonnage de la texture) sur « fmt ». Par défaut, le format (et l'espace de couleur sRGB) utilisé est le même que celui de la texture elle-même ; dans la plupart des cas, il n'est donc pas nécessaire d'appeler cette fonction.
Ce paramètre n’est pris en compte que lorsque la fonctionnalité « QRhi::TextureViewFormat » est signalée comme prise en charge.
Remarque : cette fonctionnalité est fournie pour permettre la « conversion » entre les formats non-sRGB et sRGB afin que les lectures du shader effectuent, ou non, les conversions sRGB implicites. D’autres types de conversion peuvent fonctionner ou non.
Cette fonction a été introduite dans Qt 6.8.
Voir également readViewFormat().
void QRhiTexture::setSampleCount(int s)
Définit le nombre d'échantillons sur s.
Voir aussi sampleCount().
[since 6.8] void QRhiTexture::setWriteViewFormat(const QRhiTexture::ViewFormat &fmt)
Définit le format d'affichage de la cible de rendu sur ` fmt`. Par défaut, le format (et l'espace colorimétrique sRGB) utilisé est le même que celui de la texture elle-même ; dans la plupart des cas, il n'est donc pas nécessaire d'appeler cette fonction.
Un cas d’utilisation courant pour la spécification d’un format de vue d’écriture consiste à travailler avec des textures fournies en externe qui, indépendamment de notre contrôle, utilisent un format sRGB avec des API 3D telles que Vulkan ou Direct 3D, mais le moteur de rendu est déjà prêt à gérer la linéarisation et la conversion vers sRGB à la fin de son pipeline de shading. Dans ce cas, ce qu’il faut lors du rendu dans une telle texture, c’est une vue de cible de rendu (par exemple VkImageView) qui ait le même format, mais non sRGB. (Si, par exemple, une implémentation OpenXR fournit une texture au format VK_FORMAT_R8G8B8A8_SRGB, il est probable que le rendu vers celle-ci doive être effectué à l’aide d’une vue de type VK_FORMAT_R8G8B8A8_UNORM, si tel est ce qu’exige le pipeline du moteur de rendu ; dans cet exemple, on appellerait cette fonction avec une ` ViewFormat ` dont le format est ` QRhiTexture::RGBA8 ` et dont ` srgb ` est défini sur ` false`).
Ce paramètre n’est pris en compte que lorsque la fonctionnalité « QRhi::TextureViewFormat » est signalée comme prise en charge.
Remarque : cette fonctionnalité est fournie pour permettre la « conversion » entre les espaces de couleurs non-sRGB et sRGB afin que l'écriture du shader n'effectue pas, ou effectue, les conversions sRGB implicites. D'autres types de conversion peuvent fonctionner ou non.
Cette fonction a été introduite dans Qt 6.8.
Voir également writeViewFormat().
[since 6.8] QRhiTexture::ViewFormat QRhiTexture::writeViewFormat() const
Renvoie le format de vue utilisé lors de l'écriture dans la texture et lors de son utilisation avec les fonctions de chargement/enregistrement d'images. Si cette fonction n'est pas appelée, le format de vue est supposé être le même que celui de la fonction ` format()`.
Cette fonction a été introduite dans Qt 6.8.
Voir également setWriteViewFormat().
© 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.