diff -r 56cd8111b7f7 -r 41300fa6a67c src/openvg/qpixmapdata_vg_p.h --- 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 #include -#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