QRhiTextureUploadDescription 类
描述纹理上传操作。 更多信息...
头文件 | #include <QRhiTextureUploadDescription> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
qmake | QT += 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 |
qsizetype | entryCount() const |
void | setEntries(std::initializer_list<QRhiTextureUploadEntry> list) |
void | setEntries(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)
使用迭代器 first 和 last 设置条目列表。
© 2024 Qt 公司有限公司。此处包含的文档贡献是各自所有者的版权。此处提供的文档是根据自由软件基金会发布的 GNU 自由文档许可证版本 1.3 的条款授权的。Qt 和相应的标志是芬兰以及/或其他地区的 Qt 公司的商标。所有其他商标均为其各自所有者的财产。