diff options
Diffstat (limited to 'src/quick/scenegraph/compressedtexture/qsgcompressedatlastexture.cpp')
-rw-r--r-- | src/quick/scenegraph/compressedtexture/qsgcompressedatlastexture.cpp | 16 |
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) |