rework backend texture upload APIs
The main goal is to allow more flexibility, allow cubemap arrays in the future and better match vk and metal apis. Main changes: - remove updateCubeImage - remove update2DImage - update3DImage is now the only texture upload backend API cubemaps are now treated just like a 2D array of 6 layers. For this reason, Texture::setImage(..., FaceOFfsets) is deprecated. Additionally, the 2D versions of Texture::setImage() become inline helpers. A side effect of this change is that it is now possible to update only a single face of a cubemap, but also a region of a face (or faces).
This commit is contained in:
committed by
Mathias Agopian
parent
815d202f6d
commit
61fb5a588e
@@ -76,25 +76,30 @@ Texture* createTexture(Engine* engine, const Ktx1Bundle& ktx, bool srgb,
|
||||
if (isCompressed(ktxinfo)) {
|
||||
if (ktx.isCubemap()) {
|
||||
for (uint32_t level = 0; level < nmips; ++level) {
|
||||
ktx.getBlob({level, 0, 0}, &data, &size);
|
||||
PixelBufferDescriptor pbd(data, size * 6, cdatatype, size, cb, cbuser);
|
||||
texture->setImage(*engine, level, std::move(pbd), Texture::FaceOffsets(size));
|
||||
ktx.getBlob({ level, 0, 0 }, &data, &size);
|
||||
const uint32_t dim = texture->getWidth(level);
|
||||
texture->setImage(*engine, level, 0, 0, dim, dim, {
|
||||
data, size * 6, cdatatype, size, cb, cbuser
|
||||
});
|
||||
}
|
||||
return texture;
|
||||
}
|
||||
for (uint32_t level = 0; level < nmips; ++level) {
|
||||
ktx.getBlob({level, 0, 0}, &data, &size);
|
||||
PixelBufferDescriptor pbd(data, size, cdatatype, size, cb, cbuser);
|
||||
texture->setImage(*engine, level, std::move(pbd));
|
||||
ktx.getBlob({ level, 0, 0 }, &data, &size);
|
||||
texture->setImage(*engine, level, {
|
||||
data, size, cdatatype, size, cb, cbuser
|
||||
});
|
||||
}
|
||||
return texture;
|
||||
}
|
||||
|
||||
if (ktx.isCubemap()) {
|
||||
for (uint32_t level = 0; level < nmips; ++level) {
|
||||
ktx.getBlob({level, 0, 0}, &data, &size);
|
||||
PixelBufferDescriptor pbd(data, size * 6, dataformat, datatype, cb, cbuser);
|
||||
texture->setImage(*engine, level, std::move(pbd), Texture::FaceOffsets(size));
|
||||
ktx.getBlob({ level, 0, 0 }, &data, &size);
|
||||
const uint32_t dim = texture->getWidth(level);
|
||||
texture->setImage(*engine, level, 0, 0, dim, dim, {
|
||||
data, size * 6, dataformat, datatype, cb, cbuser
|
||||
});
|
||||
}
|
||||
return texture;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user