diff options
author | Juan Casafranca <juan.casafranca@kdab.com> | 2020-09-25 13:02:24 +0200 |
---|---|---|
committer | Juan José Casafranca <juan.casafranca@kdab.com> | 2020-09-28 14:03:33 +0200 |
commit | 4e967f9f84dab2e68f943ee5e26430bd6cb76e81 (patch) | |
tree | d218093b45629a699235b8cee770b66c7a84a95a | |
parent | 1f9162bcd4fc6a3bc90ebcc04e609046e9d191d2 (diff) |
Allow to specify a functor to extract data from QTextureImageData
Change-Id: Idd052f6c24665a1accd2cd681c80fe74846e5c39
Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
-rw-r--r-- | src/render/texture/qtextureimagedata.cpp | 12 | ||||
-rw-r--r-- | src/render/texture/qtextureimagedata_p.h | 4 |
2 files changed, 16 insertions, 0 deletions
diff --git a/src/render/texture/qtextureimagedata.cpp b/src/render/texture/qtextureimagedata.cpp index 50a52d90f..4841cebdf 100644 --- a/src/render/texture/qtextureimagedata.cpp +++ b/src/render/texture/qtextureimagedata.cpp @@ -88,6 +88,9 @@ QByteArray QTextureImageDataPrivate::data(int layer, int face, int mipmapLevel) return QByteArray(); } + if (m_dataExtractor) + return m_dataExtractor(layer, face, mipmapLevel); + if (m_isKtx) return ktxData(layer, face, mipmapLevel); @@ -113,6 +116,15 @@ void QTextureImageDataPrivate::setData(const QByteArray &data, m_blockSize = blockSize; } +void QTextureImageDataPrivate::setData(const QByteArray &data, + std::function<QByteArray(int layer, int face, int mipmapLevel)> dataExtractor, + bool isCompressed) +{ + m_isCompressed = isCompressed; + m_data = data; + m_dataExtractor = dataExtractor; +} + int QTextureImageDataPrivate::ddsLayerSize() const { return m_faces * ddsFaceSize(); diff --git a/src/render/texture/qtextureimagedata_p.h b/src/render/texture/qtextureimagedata_p.h index ee12d3387..30968e199 100644 --- a/src/render/texture/qtextureimagedata_p.h +++ b/src/render/texture/qtextureimagedata_p.h @@ -64,6 +64,9 @@ public: QTextureImageDataPrivate(); void setData(const QByteArray &data, int blockSize, bool isCompressed); + void setData(const QByteArray &data, + std::function<QByteArray(int layer, int face, int mipmapLevel)> dataExtractor, + bool isCompressed); bool setCompressedFile(const QString &source); @@ -90,6 +93,7 @@ public: // public API changes. Consider https://codereview.qt-project.org/#/c/178474/ for Qt 6. bool m_isKtx; QByteArray m_data; + std::function<QByteArray(int layer, int face, int mipmapLevel)> m_dataExtractor; static QTextureImageDataPrivate *get(QTextureImageData *imageData); |