aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/scenegraph/compressedtexture/qsgcompressedatlastexture.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/quick/scenegraph/compressedtexture/qsgcompressedatlastexture.cpp')
-rw-r--r--src/quick/scenegraph/compressedtexture/qsgcompressedatlastexture.cpp16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/quick/scenegraph/compressedtexture/qsgcompressedatlastexture.cpp b/src/quick/scenegraph/compressedtexture/qsgcompressedatlastexture.cpp
index 796bc870de..46b2c6386c 100644
--- a/src/quick/scenegraph/compressedtexture/qsgcompressedatlastexture.cpp
+++ b/src/quick/scenegraph/compressedtexture/qsgcompressedatlastexture.cpp
@@ -65,7 +65,7 @@ namespace QSGCompressedAtlasTexture
{
Atlas::Atlas(const QSize &size, uint format)
- : QSGAtlasTexture::AtlasBase(size)
+ : QSGOpenGLAtlasTexture::AtlasBase(size)
, m_format(format)
{
}
@@ -88,10 +88,20 @@ Texture *Atlas::create(const QByteArray &data, int dataLength, int dataOffset, c
void Atlas::generateTexture()
{
+ int bytesPerBlock = 8;
+ switch (m_format) {
+ case QOpenGLTexture::RGBA8_ETC2_EAC:
+ case QOpenGLTexture::RGBA_DXT3:
+ case QOpenGLTexture::RGBA_DXT5:
+ bytesPerBlock = 16;
+ default:
+ break;
+ }
+
QOpenGLFunctions *funcs = QOpenGLContext::currentContext()->functions();
funcs->glCompressedTexImage2D(GL_TEXTURE_2D, 0, m_format,
m_size.width(), m_size.height(), 0,
- (m_size.width() * m_size.height()) / 2,
+ (m_size.width() / 4 * m_size.height() / 4) * bytesPerBlock,
nullptr);
}
@@ -117,7 +127,7 @@ void Atlas::uploadPendingTexture(int i)
}
Texture::Texture(Atlas *atlas, const QRect &textureRect, const QByteArray &data, int dataLength, int dataOffset, const QSize &size)
- : QSGAtlasTexture::TextureBase(atlas, textureRect)
+ : QSGOpenGLAtlasTexture::TextureBase(atlas, textureRect)
, m_nonatlas_texture(nullptr)
, m_data(data)
, m_size(size)