QRhiTextureUploadDescription Class

テクスチャのアップロード操作について説明します。詳細...

Header: #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

パブリック関数

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)

詳細説明

QRhiResourceUpdateBatch::uploadTexture() と共に使用されます。この関数には、QImage を受け取るものと、QRhiTextureUploadDescription を受け取るものです。前者は便宜的なバージョンで、内部的にはレイヤー0のレベル0をターゲットとする単一の画像でQRhiTextureUploadDescriptionを作成します。

例えば、QImage の内容を、ピクセルサイズが一致するQRhiTexture にアップロードしたいという、よくある単純なケースです:

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

キューブマップ、事前に生成されたmip画像、圧縮されたテクスチャ、または部分的なアップロードが含まれる場合、アプリケーションは代わりにこのクラスを使用する必要があります。

QRhiTextureUploadDescriptionはまた、アトラスやグリフキャッシュテクスチャを生成する場合などに便利な、バッチアップロードを指定することもできます。同じサブリソース(同じレイヤーとレベルを意味します)に対する複数の部分的なアップロードがサポートされており、バックエンドや基礎となるグラフィックスAPIによっては、それらのそれぞれに対して個別のuploadTexture ()コマンドを発行するのとは対照的に、同じQRhiTextureUploadDescriptionにバッチ化すると、より効率的になります。

注: キューブマップは、+X、-X、+Y、-Y、+Z、-Zの順番で6つの面に1つのレイヤーを持ちます。

例えば、キューブマップの面を指定すると次のようになります:

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

圧縮テクスチャのmipイメージを指定する別の例:

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

同じサブリソースを対象とする部分アップロードでは、可能な限り、それらを1つのアップロードリクエストにまとめることをお勧めします:

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

注意: これは互換性保証に制限のある RHI API です。詳細はQRhi を参照してください。

QRhiResourceUpdateBatchも参照の こと。

メンバ関数ドキュメント

[constexpr noexcept] QRhiTextureUploadDescription::QRhiTextureUploadDescription()

空のテクスチャアップロード記述を構築します。

QRhiTextureUploadDescription::QRhiTextureUploadDescription(const QRhiTextureUploadEntry &entry)

entry で説明されている単一のサブリソースアップロードを持つテクスチャアップロード記述を構築します。

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

指定されたlist エントリを持つテクスチャアップロード記述を構築します。

注: list は、同じレイヤーとレベルを持つ複数のQRhiTextureUploadEntry エレメントを含むこともできます。これは、それらのアップロードが部分的である場合、つまり、それらのサブリソースの説明が、サブリソースの寸法よりも小さいソースサイズまたは画像を持つ場合に意味を成し、別々の uploadTexture() を発行するよりも効率的である可能性があります。

const QRhiTextureUploadEntry *QRhiTextureUploadDescription::cbeginEntries() const

エントリリストの最初の項目を指す const イテレータを返します。

const QRhiTextureUploadEntry *QRhiTextureUploadDescription::cendEntries() const

エントリリストの最後の項目の直後を指す const イテレータを返します。

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

index にあるエントリを返します。

qsizetype QRhiTextureUploadDescription::entryCount() const

エントリ数を返します。

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

エントリのlist を設定します。

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

イテレータfirst およびlast を使用して、エントリのリストを設定します。

本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。