summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJuan Casafranca <juan.casafranca@kdab.com>2020-09-25 13:02:24 +0200
committerJuan José Casafranca <juan.casafranca@kdab.com>2020-09-28 14:03:33 +0200
commit4e967f9f84dab2e68f943ee5e26430bd6cb76e81 (patch)
treed218093b45629a699235b8cee770b66c7a84a95a
parent1f9162bcd4fc6a3bc90ebcc04e609046e9d191d2 (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.cpp12
-rw-r--r--src/render/texture/qtextureimagedata_p.h4
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);