src/openvg/qpixmapdata_vg_p.h
changeset 3 41300fa6a67c
parent 0 1918ee327afb
child 4 3b1da2848fc7
--- a/src/openvg/qpixmapdata_vg_p.h	Tue Jan 26 12:42:25 2010 +0200
+++ b/src/openvg/qpixmapdata_vg_p.h	Tue Feb 02 00:43:10 2010 +0200
@@ -55,8 +55,6 @@
 
 #include <QtGui/private/qpixmap_raster_p.h>
 #include <private/qvg_p.h>
-#if !defined(QT_NO_EGL)
-#endif
 
 #if defined(Q_OS_SYMBIAN)
 class RSGImage;
@@ -65,6 +63,16 @@
 QT_BEGIN_NAMESPACE
 
 class QEglContext;
+class QVGImagePool;
+
+#if !defined(QT_NO_EGL)
+class QVGPixmapData;
+class QVGSharedContext;
+
+void qt_vg_register_pixmap(QVGPixmapData *pd);
+void qt_vg_unregister_pixmap(QVGPixmapData *pd);
+void qt_vg_hibernate_pixmaps(QVGSharedContext *context);
+#endif
 
 class Q_OPENVG_EXPORT QVGPixmapData : public QPixmapData
 {
@@ -89,10 +97,25 @@
 
     // Return the VGImage form of this pixmap, creating it if necessary.
     // This assumes that there is a VG context current.
-    VGImage toVGImage();
+    virtual VGImage toVGImage();
 
     // Return the VGImage form for a specific opacity setting.
-    VGImage toVGImage(qreal opacity);
+    virtual VGImage toVGImage(qreal opacity);
+
+    // Detach this image from the image pool.
+    virtual void detachImageFromPool();
+
+    // Release the VG resources associated with this pixmap and copy
+    // the pixmap's contents out of the GPU back into main memory.
+    // The VG resource will be automatically recreated the next time
+    // toVGImage() is called.  Does nothing if the pixmap cannot be
+    // hibernated for some reason (e.g. VGImage is shared with another
+    // process via a SgImage).
+    virtual void hibernate();
+
+    // Called when the QVGImagePool wants to reclaim this pixmap's
+    // VGImage objects to reuse storage.
+    virtual void reclaimImages();
 
     QSize size() const { return QSize(w, h); }
 
@@ -109,17 +132,37 @@
 #endif
 
 private:
+    QVGPixmapData *nextLRU;
+    QVGPixmapData *prevLRU;
+    bool inLRU;
+    friend class QVGImagePool;
+
+#if !defined(QT_NO_EGL)
+    QVGPixmapData *next;
+    QVGPixmapData *prev;
+
+    friend void qt_vg_register_pixmap(QVGPixmapData *pd);
+    friend void qt_vg_unregister_pixmap(QVGPixmapData *pd);
+    friend void qt_vg_hibernate_pixmaps(QVGSharedContext *context);
+#endif
+
+protected:
+    QSize prevSize;
     VGImage vgImage;
     VGImage vgImageOpacity;
     qreal cachedOpacity;
     mutable QImage source;
     mutable bool recreate;
+    bool inImagePool;
 #if !defined(QT_NO_EGL)
     mutable QEglContext *context;
 #endif
 
     void forceToImage();
     QImage::Format sourceFormat() const;
+
+    void destroyImageAndContext();
+    void destroyImages();
 };
 
 QT_END_NAMESPACE