summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAntti Määttä <antti.maatta@qt.io>2019-03-18 09:17:22 +0200
committerAntti Määttä <antti.maatta@qt.io>2019-03-18 14:16:16 +0000
commit057d6e3cf525fa625a22487ca1d1968e313e5801 (patch)
tree6f8f0a74b8fe09e662f53b675837665b17951b72 /src
parent5d9f20e35c11292ebefcd19653c1cf51ee7baaf0 (diff)
Fix compressed texture image loading
- Add DXT1 format to block size for texture - Set correct image size for each mip level Task-number: QT3DS-3175 Change-Id: I5ca31882bdf43b0f5d2bda7cab345113184724ea Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io> Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/runtime/q3dsimageloaders_p.h9
1 files changed, 5 insertions, 4 deletions
diff --git a/src/runtime/q3dsimageloaders_p.h b/src/runtime/q3dsimageloaders_p.h
index f22d8bc..a1e2459 100644
--- a/src/runtime/q3dsimageloaders_p.h
+++ b/src/runtime/q3dsimageloaders_p.h
@@ -832,6 +832,7 @@ static inline quint32 q3ds_blockSizeForTextureFormat(QOpenGLTexture::TextureForm
case QOpenGLTexture::SRGB8_PunchThrough_Alpha1_ETC2:
case QOpenGLTexture::R11_EAC_UNorm:
case QOpenGLTexture::R11_EAC_SNorm:
+ case QOpenGLTexture::RGB_DXT1:
return 8;
default:
@@ -920,12 +921,12 @@ inline QVector<Qt3DRender::QTextureImageDataPtr> q3ds_loadKtx(QIODevice *source)
const int level0Height = decode(header.pixelHeight);
int faceCount = decode(header.numberOfFaces);
const int mipMapLevels = decode(header.numberOfMipmapLevels);
- auto createImageData = [=](const QByteArray &compressedData) {
+ auto createImageData = [=](const QByteArray &compressedData, int mipLevel) {
Qt3DRender::QTextureImageDataPtr imageData = Qt3DRender::QTextureImageDataPtr::create();
imageData->setTarget(faceCount == 6 ? QOpenGLTexture::TargetCubeMap : QOpenGLTexture::Target2D);
imageData->setFormat(QOpenGLTexture::TextureFormat(decode(header.glInternalFormat)));
- imageData->setWidth(level0Width);
- imageData->setHeight(level0Height);
+ imageData->setWidth(qMax(level0Width >> mipLevel, 1));
+ imageData->setHeight(qMax(level0Height >> mipLevel, 1));
imageData->setLayers(1);
imageData->setDepth(1);
// separate textureimage per face and per mipmap
@@ -947,7 +948,7 @@ inline QVector<Qt3DRender::QTextureImageDataPtr> q3ds_loadKtx(QIODevice *source)
int imageSize = *reinterpret_cast<const quint32 *>(p);
p += 4;
for (int face = 0; face < faceCount; ++face) {
- result << createImageData(QByteArray(p, imageSize));
+ result << createImageData(QByteArray(p, imageSize), mip);
p = basep + q3ds_alignedOffset(p + imageSize - basep, 4);
}
}