QRhiTextureUploadDescription 类

描述纹理上传操作。 更多信息...

头文件 #include <QRhiTextureUploadDescription>
CMakefind_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmakeQT += gui
自从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
qsizetypeentryCount() const
voidsetEntries(std::initializer_list<QRhiTextureUploadEntry> list)
voidsetEntries(InputIterator first, InputIterator last)

详细描述

QRhiResourceUpdateBatch::uploadTexture() 结合使用。该函数有两个版本:一个接收 QImage,另一个接收 QRhiTextureUploadDescription。前者是一个便捷版本,在内部创建一个 QRhiTextureUploadDescription,将单个图像针对层级 0 的一层。

以下是一个将 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);

当涉及到立方体、预生成的多级图像、压缩纹理或部分上传时,应用程序将不得不使用这个类。

QRhiTextureUploadDescription 还使能够指定批量上传,这在例如生成图集或子图缓存纹理时非常有用:支持对同一子资源(即相同的层和层级)进行多个部分上传,并且这些上传,取决于后端和底层图形 API,批量到同一个 QRhiTextureUploadDescription 中可能比为每个上传发出单独的 uploadTexture() 命令更有效率。

注意:立方体有六个面的每一面都有一个层,顺序为 +X、-X、+Y、-Y、+Z、-Z。

例如,指定立方体面的可能如下所示

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

指定压缩纹理的多级图像的另一个示例

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

对于针对同一子资源的目标部分上传,建议尽可能将它们组合成一个上传请求

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)

使用迭代器 firstlast 设置条目列表。

© 2024 Qt 公司有限公司。此处包含的文档贡献是各自所有者的版权。此处提供的文档是根据自由软件基金会发布的 GNU 自由文档许可证版本 1.3 的条款授权的。Qt 和相应的标志是芬兰以及/或其他地区的 Qt 公司的商标。所有其他商标均为其各自所有者的财产。