aboutsummaryrefslogtreecommitdiffstats
path: root/src/declarative/scenegraph/qsgdistancefieldglyphcache_p.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/declarative/scenegraph/qsgdistancefieldglyphcache_p.h')
-rw-r--r--src/declarative/scenegraph/qsgdistancefieldglyphcache_p.h79
1 files changed, 51 insertions, 28 deletions
diff --git a/src/declarative/scenegraph/qsgdistancefieldglyphcache_p.h b/src/declarative/scenegraph/qsgdistancefieldglyphcache_p.h
index 0284d5ab67..c4dd97bab5 100644
--- a/src/declarative/scenegraph/qsgdistancefieldglyphcache_p.h
+++ b/src/declarative/scenegraph/qsgdistancefieldglyphcache_p.h
@@ -48,21 +48,59 @@
#include <private/qfont_p.h>
#include <private/qfontengine_p.h>
#include <QtGui/private/qdatabuffer_p.h>
+#include <private/qsgadaptationlayer_p.h>
QT_BEGIN_NAMESPACE
-class QGLShaderProgram;
-
typedef float (*ThresholdFunc)(float glyphScale);
typedef float (*AntialiasingSpreadFunc)(float glyphScale);
-class Q_DECLARATIVE_EXPORT QSGDistanceFieldGlyphCache : public QObject
+class QGLShaderProgram;
+class QSGDistanceFieldGlyphCache;
+
+class Q_DECLARATIVE_EXPORT QSGDistanceFieldGlyphCacheManager
{
- Q_OBJECT
public:
- ~QSGDistanceFieldGlyphCache();
+ QSGDistanceFieldGlyphCacheManager(const QGLContext *c);
+ ~QSGDistanceFieldGlyphCacheManager();
+
+ QSGDistanceFieldGlyphCache *cache(const QRawFont &font);
+
+ QSGGlyphNode::AntialiasingMode defaultAntialiasingMode() const { return m_defaultAntialiasingMode; }
+ void setDefaultAntialiasingMode(QSGGlyphNode::AntialiasingMode mode) { m_defaultAntialiasingMode = mode; }
+
+ ThresholdFunc thresholdFunc() const { return m_threshold_func; }
+ void setThresholdFunc(ThresholdFunc func) { m_threshold_func = func; }
+
+ AntialiasingSpreadFunc antialiasingSpreadFunc() const { return m_antialiasingSpread_func; }
+ void setAntialiasingSpreadFunc(AntialiasingSpreadFunc func) { m_antialiasingSpread_func = func; }
- static QSGDistanceFieldGlyphCache *get(const QGLContext *ctx, const QRawFont &font);
+ QGLShaderProgram *blitProgram() { return m_blitProgram; }
+ const GLfloat *blitVertexArray() const { return &m_vertexCoordinateArray[0]; }
+ const GLfloat *blitTextureArray() const { return &m_textureCoordinateArray[0]; }
+
+ int maxTextureSize() const;
+
+private:
+ QHash<QFontEngine *, QSGDistanceFieldGlyphCache *> m_caches;
+
+ const QGLContext *ctx;
+
+ QSGGlyphNode::AntialiasingMode m_defaultAntialiasingMode;
+ ThresholdFunc m_threshold_func;
+ AntialiasingSpreadFunc m_antialiasingSpread_func;
+
+ mutable int m_maxTextureSize;
+
+ QGLShaderProgram *m_blitProgram;
+ GLfloat m_vertexCoordinateArray[8];
+ GLfloat m_textureCoordinateArray[8];
+};
+
+class Q_DECLARATIVE_EXPORT QSGDistanceFieldGlyphCache
+{
+public:
+ ~QSGDistanceFieldGlyphCache();
struct Metrics {
qreal width;
@@ -88,9 +126,10 @@ public:
};
TexCoord glyphTexCoord(glyph_t glyph);
+ const QSGDistanceFieldGlyphCacheManager *manager() const { return m_manager; }
+
GLuint texture();
QSize textureSize() const;
- int maxTextureSize() const;
qreal fontScale() const;
int distanceFieldRadius() const;
QImage renderDistanceFieldGlyph(glyph_t glyph) const;
@@ -101,35 +140,23 @@ public:
void derefGlyphs(int count, const glyph_t *glyphs);
void updateCache();
- bool cacheIsFull() const { return m_textureData->currY >= maxTextureSize(); }
+ bool cacheIsFull() const { return m_textureData->currY >= m_manager->maxTextureSize(); }
bool useWorkaroundBrokenFBOReadback() const;
- static bool distanceFieldEnabled();
-
- ThresholdFunc thresholdFunc() const { return m_threshold_func; }
- void setThresholdFunc(ThresholdFunc func) { m_threshold_func = func; }
-
- AntialiasingSpreadFunc antialiasingSpreadFunc() const { return m_antialiasingSpread_func; }
- void setAntialiasingSpreadFunc(AntialiasingSpreadFunc func) { m_antialiasingSpread_func = func; }
-
-private Q_SLOTS:
- void onContextDestroyed(const QGLContext *context);
-
private:
- QSGDistanceFieldGlyphCache(const QGLContext *c, const QRawFont &font);
+ QSGDistanceFieldGlyphCache(QSGDistanceFieldGlyphCacheManager *man, const QGLContext *c, const QRawFont &font);
void createTexture(int width, int height);
void resizeTexture(int width, int height);
- static QHash<QPair<const QGLContext *, QFontEngine *>, QSGDistanceFieldGlyphCache *> m_caches;
+ QSGDistanceFieldGlyphCacheManager *m_manager;
QRawFont m_font;
QRawFont m_referenceFont;
int m_glyphCount;
QHash<glyph_t, Metrics> m_metrics;
- mutable int m_maxTextureSize;
struct DistanceFieldTextureData {
GLuint texture;
@@ -155,15 +182,11 @@ private:
};
DistanceFieldTextureData *textureData();
DistanceFieldTextureData *m_textureData;
- static QHash<QFontEngine *, QGLContextGroupResource<DistanceFieldTextureData> > m_textures_data;
+ static QHash<QString, QGLContextGroupResource<DistanceFieldTextureData> > m_textures_data;
const QGLContext *ctx;
- QGLShaderProgram *m_blitProgram;
- GLfloat m_vertexCoordinateArray[8];
- GLfloat m_textureCoordinateArray[8];
- ThresholdFunc m_threshold_func;
- AntialiasingSpreadFunc m_antialiasingSpread_func;
+ friend class QSGDistanceFieldGlyphCacheManager;
};
QT_END_NAMESPACE