summaryrefslogtreecommitdiffstats
path: root/src/extras/text/qtextureatlas_p.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/extras/text/qtextureatlas_p.h')
-rw-r--r--src/extras/text/qtextureatlas_p.h82
1 files changed, 19 insertions, 63 deletions
diff --git a/src/extras/text/qtextureatlas_p.h b/src/extras/text/qtextureatlas_p.h
index 34386a87a..8dc9e19b3 100644
--- a/src/extras/text/qtextureatlas_p.h
+++ b/src/extras/text/qtextureatlas_p.h
@@ -51,86 +51,42 @@
// We mean it.
//
-#include <QtCore/qscopedpointer.h>
-#include <Qt3DRender/private/qabstracttexture_p.h>
-#include <Qt3DRender/qtexturegenerator.h>
-#include <Qt3DExtras/private/areaallocator_p.h>
-#include <Qt3DExtras/qtextureatlas.h>
+#include <Qt3DExtras/qt3dextras_global.h>
+#include <Qt3DRender/qabstracttexture.h>
QT_BEGIN_NAMESPACE
namespace Qt3DExtras {
-// Used to store texture info within atlas
-struct AtlasTexture
-{
- QRect position;
- int padding = 0;
-};
+class QTextureAtlasPrivate;
-// data shared between QTextureAtlasPrivate and the QTextureGenerators
-// we use this extra indirection so we can lazily copy the sub-images
-// into the actual texture image in the backend texture loader thread.
-class QTextureAtlasData
+class QTextureAtlas : public Qt3DRender::QAbstractTexture
{
-public:
- QTextureAtlasData(int w, int h, QImage::Format fmt);
- ~QTextureAtlasData();
-
- int width() const { return m_image.width(); }
- int height() const { return m_image.height(); }
+ Q_OBJECT
- void addImage(const AtlasTexture &texture, const QImage &image);
- QByteArray createUpdatedImageData();
-
-private:
- struct Update {
- AtlasTexture textureInfo;
- QImage image;
- };
-
- QMutex m_mutex;
- QImage m_image;
- QVector<Update> m_updates;
-};
-
-typedef QSharedPointer<QTextureAtlasData> QTextureAtlasDataPtr;
-
-class QTextureAtlasPrivate : public Qt3DRender::QAbstractTexturePrivate
-{
public:
- QTextureAtlasPrivate();
- ~QTextureAtlasPrivate();
+ typedef int TextureId;
+ static Q_CONSTEXPR TextureId InvalidTexture = -1;
- Q_DECLARE_PUBLIC(QTextureAtlas)
+ QTextureAtlas(Qt3DCore::QNode *parent = nullptr);
+ ~QTextureAtlas();
- QTextureAtlas::TextureId m_currId = 1; // IDs for new sub-textures
- int m_currGen = 0;
+ QOpenGLTexture::PixelFormat pixelFormat() const;
+ void setPixelFormat(QOpenGLTexture::PixelFormat fmt);
- QTextureAtlasDataPtr m_data;
- QScopedPointer<AreaAllocator> m_allocator;
- QOpenGLTexture::PixelFormat m_pixelFormat;
- QHash<QTextureAtlas::TextureId, AtlasTexture> m_textures;
-};
+ TextureId addImage(const QImage &image, int padding);
+ void removeImage(TextureId id);
-class QTextureAtlasGenerator : public Qt3DRender::QTextureGenerator
-{
-public:
- QTextureAtlasGenerator(const QTextureAtlasPrivate *texAtlas);
- ~QTextureAtlasGenerator();
- Qt3DRender::QTextureDataPtr operator()() Q_DECL_OVERRIDE;
- bool operator==(const QTextureGenerator &other) const Q_DECL_OVERRIDE;
+ int imageCount() const;
- QT3D_FUNCTOR(QTextureAtlasGenerator)
+ bool hasImage(TextureId id) const;
+ QRect imagePosition(TextureId id) const;
+ QRectF imageTexCoords(TextureId id) const;
+ int imagePadding(TextureId id) const;
private:
- QTextureAtlasDataPtr m_data;
- Qt3DRender::QAbstractTexture::TextureFormat m_format;
- QOpenGLTexture::PixelFormat m_pixelFormat;
- int m_generation;
- Qt3DCore::QNodeId m_atlasId;
+ Q_DECLARE_PRIVATE(QTextureAtlas)
};
-typedef QSharedPointer<QTextureAtlasGenerator> QTextureAtlasGeneratorPtr;
} // namespace Qt3DExtras