Sur cette page

QRhiTextureUploadDescription Class

Décrit une opération de téléchargement de texture. Plus d'informations...

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

Fonctions publiques

QRhiTextureUploadDescription()
QRhiTextureUploadDescription(const QRhiTextureUploadEntry &entry)
QRhiTextureUploadDescription(std::initializer_list<QRhiTextureUploadEntry> list)
const QRhiTextureUploadEntry *cbeginEntries() const
const QRhiTextureUploadEntry *cendEntries() const
const QRhiTextureUploadEntry *entryAt(qsizetype index) const
qsizetype entryCount() const
void setEntries(std::initializer_list<QRhiTextureUploadEntry> list)
void setEntries(InputIterator first, InputIterator last)

Description détaillée

Utilisée avec QRhiResourceUpdateBatch::uploadTexture(). Cette fonction a deux variantes : l'une prenant un QImage et l'autre prenant un QRhiTextureUploadDescription. La première est une version de commodité, créant en interne un QRhiTextureUploadDescription avec une seule image ciblant le niveau 0 pour la couche 0.

Un exemple du cas simple et courant où l'on souhaite télécharger le contenu d'un site QImage vers un site QRhiTexture avec une taille de pixel correspondante :

QImage image(256, 256, QImage::Format_RGBA8888);
image.fill(Qt::green); // or could use a QPainter targeting image
QRhiTexture *texture = rhi->newTexture(QRhiTexture::RGBA8, QSize(256, 256));
texture->create();
QRhiResourceUpdateBatch *u = rhi->nextResourceUpdateBatch();
u->uploadTexture(texture, image);

Lorsque des cubemaps, des images mip pré-générées, des textures compressées ou des téléchargements partiels sont impliqués, les applications devront utiliser cette classe à la place.

QRhiTextureUploadDescription permet également de spécifier des téléchargements par lots, ce qui est utile par exemple lors de la génération d'un atlas ou d'une texture de cache de glyphe : plusieurs téléchargements partiels pour la même sous-ressource (c'est-à-dire la même couche et le même niveau) sont pris en charge et peuvent être, en fonction du backend et de l'API graphique sous-jacente, plus efficaces lorsqu'ils sont regroupés dans le même QRhiTextureUploadDescription plutôt que d'émettre des commandes uploadTexture() individuelles pour chacun d'entre eux.

Remarque : les Cubemaps ont une couche pour chacune des six faces dans l'ordre +X, -X, +Y, -Y, +Z, -Z.

Par exemple, la spécification des faces d'une cubemap peut ressembler à ce qui suit :

QImage faces[6];
// ...
QVarLengthArray<QRhiTextureUploadEntry, 6> entries;
for (int i = 0; i < 6; ++i)
  entries.append(QRhiTextureUploadEntry(i, 0, faces[i]));
QRhiTextureUploadDescription desc;
desc.setEntries(entries.cbegin(), entries.cend());
resourceUpdates->uploadTexture(texture, desc);

Un autre exemple qui spécifie des images mip pour une texture compressée :

QList<QRhiTextureUploadEntry> entries;
const int mipCount = rhi->mipLevelsForSize(compressedTexture->pixelSize());
for (int level = 0; level < mipCount; ++level) {
    const QByteArray compressedDataForLevel = ..
    entries.append(QRhiTextureUploadEntry(0, level, compressedDataForLevel));
}
QRhiTextureUploadDescription desc;
desc.setEntries(entries.cbegin(), entries.cend());
resourceUpdates->uploadTexture(compressedTexture, desc);

Lorsque des téléchargements partiels ciblent la même sous-ressource, il est recommandé de les regrouper en une seule demande de téléchargement, dans la mesure du possible :

QRhiTextureSubresourceUploadDescription subresDesc(image);
subresDesc.setSourceSize(QSize(10, 10));
subResDesc.setDestinationTopLeft(QPoint(50, 40));
QRhiTextureUploadEntry entry(0, 0, subresDesc); // layer 0, level 0

QRhiTextureSubresourceUploadDescription subresDesc2(image);
subresDesc2.setSourceSize(QSize(30, 40));
subResDesc2.setDestinationTopLeft(QPoint(100, 200));
QRhiTextureUploadEntry entry2(0, 0, subresDesc2); // layer 0, level 0, i.e. same subresource

QRhiTextureUploadDescription desc({ entry, entry2});
resourceUpdates->uploadTexture(texture, desc);

Remarque : il s'agit d'une API RHI avec des garanties de compatibilité limitées, voir QRhi pour plus de détails.

Voir également QRhiResourceUpdateBatch.

Documentation des fonctions membres

[constexpr noexcept] QRhiTextureUploadDescription::QRhiTextureUploadDescription()

Construit une description de téléchargement de texture vide.

QRhiTextureUploadDescription::QRhiTextureUploadDescription(const QRhiTextureUploadEntry &entry)

Construit une description de téléchargement de texture avec un seul téléchargement de sous-ressource décrit par entry.

QRhiTextureUploadDescription::QRhiTextureUploadDescription(std::initializer_list<QRhiTextureUploadEntry> list)

Construit une description de téléchargement de texture avec les entrées spécifiées sur list.

Remarque : list peut également contenir plusieurs éléments QRhiTextureUploadEntry avec la même couche et le même niveau. Cela a du sens lorsque ces téléchargements sont partiels, c'est-à-dire que la description de leur sous-ressource a une taille de source ou une image plus petite que les dimensions de la sous-ressource, et peut être plus efficace que d'émettre des uploadTexture() distincts.

const QRhiTextureUploadEntry *QRhiTextureUploadDescription::cbeginEntries() const

Renvoie un itérateur constant pointant vers le premier élément de la liste d'entrée.

const QRhiTextureUploadEntry *QRhiTextureUploadDescription::cendEntries() const

Renvoie un itérateur constant pointant juste après le dernier élément de la liste d'entrée.

const QRhiTextureUploadEntry *QRhiTextureUploadDescription::entryAt(qsizetype index) const

Renvoie l'entrée à index.

qsizetype QRhiTextureUploadDescription::entryCount() const

Renvoie le nombre d'entrées.

void QRhiTextureUploadDescription::setEntries(std::initializer_list<QRhiTextureUploadEntry> list)

Définit l'adresse list des entrées.

template <typename InputIterator> void QRhiTextureUploadDescription::setEntries(InputIterator first, InputIterator last)

Définit la liste des entrées en utilisant les itérateurs first et last.

© 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.