QRhiTextureUploadDescription Class

Beschreibt einen Textur-Upload-Vorgang. Mehr...

Kopfzeile: #include <rhi/qrhi.h>
CMake: find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::GuiPrivate)
qmake: QT += gui-private
Since: Qt 6.6

Öffentliche Funktionen

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)

Detaillierte Beschreibung

Wird mit QRhiResourceUpdateBatch::uploadTexture() verwendet. Diese Funktion hat zwei Varianten: eine mit einem QImage und eine mit einer QRhiTextureUploadDescription. Erstere ist eine Komfortversion, die intern eine QRhiTextureUploadDescription mit einem einzelnen Bild auf Ebene 0 für Layer 0 erstellt.

Ein Beispiel für den häufigen, einfachen Fall, dass man den Inhalt einer QImage auf eine QRhiTexture mit einer passenden Pixelgröße hochladen möchte:

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);

Wenn Cubemaps, vorgenerierte mip-Bilder, komprimierte Texturen oder Teil-Uploads involviert sind, müssen Anwendungen stattdessen diese Klasse verwenden.

QRhiTextureUploadDescription ermöglicht auch die Angabe von gebündelten Uploads, die z. B. bei der Erzeugung einer Atlas- oder Glyphen-Cache-Textur nützlich sind: Mehrere partielle Uploads für dieselbe Subresource (d. h. dieselbe Ebene und denselben Layer) werden unterstützt und können, abhängig vom Backend und der zugrunde liegenden Grafik-API, effizienter sein, wenn sie in derselben QRhiTextureUploadDescription gebündelt werden, als wenn für jede einzelne Textur einzelne uploadTexture()-Befehle ausgegeben werden.

Hinweis: Cubemaps haben eine Ebene für jede der sechs Flächen in der Reihenfolge +X, -X, +Y, -Y, +Z, -Z.

Die Angabe der Flächen einer Cubemap könnte zum Beispiel wie folgt aussehen:

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);

Ein weiteres Beispiel, das mip-Bilder für eine komprimierte Textur angibt:

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);

Bei teilweisen Uploads, die auf dieselbe Subressource abzielen, wird empfohlen, sie nach Möglichkeit in einer einzigen Upload-Anforderung zusammenzufassen:

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);

Hinweis: Dies ist eine RHI-API mit begrenzten Kompatibilitätsgarantien, siehe QRhi für Details.

Siehe auch QRhiResourceUpdateBatch.

Dokumentation der Mitgliedsfunktionen

[constexpr noexcept] QRhiTextureUploadDescription::QRhiTextureUploadDescription()

Konstruiert eine leere Textur-Upload-Beschreibung.

QRhiTextureUploadDescription::QRhiTextureUploadDescription(const QRhiTextureUploadEntry &entry)

Konstruiert eine Textur-Upload-Beschreibung mit einem einzelnen Subresource-Upload, der durch entry beschrieben wird.

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

Konstruiert eine Textur-Upload-Beschreibung mit der angegebenen list von Einträgen.

Hinweis: list kann auch mehrere QRhiTextureUploadEntry Elemente mit demselben Layer und Level enthalten. Dies ist sinnvoll, wenn diese Uploads partiell sind, d.h. ihre Subresource-Beschreibung hat eine Quellgröße oder ein Bild, das kleiner ist als die Subresource-Dimensionen, und kann effizienter sein als die Ausgabe von separaten uploadTexture()'s.

const QRhiTextureUploadEntry *QRhiTextureUploadDescription::cbeginEntries() const

Gibt einen konstanten Iterator zurück, der auf das erste Element in der Eintragsliste zeigt.

const QRhiTextureUploadEntry *QRhiTextureUploadDescription::cendEntries() const

Gibt einen konstanten Iterator zurück, der direkt auf das letzte Element in der Eintragsliste zeigt.

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

Gibt den Eintrag unter index zurück.

qsizetype QRhiTextureUploadDescription::entryCount() const

Gibt die Anzahl der Einträge zurück.

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

Legt die list der Einträge fest.

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

Legt die Liste der Einträge mit Hilfe der Iteratoren first und last fest.

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