diff options
Diffstat (limited to 'src/extras/text/qtextureatlas_p.h')
-rw-r--r-- | src/extras/text/qtextureatlas_p.h | 82 |
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 |