1 /* 2 * Copyright 2010 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #ifndef SkGrPixelRef_DEFINED 9 #define SkGrPixelRef_DEFINED 10 11 #include "SkBitmap.h" 12 #include "SkPixelRef.h" 13 #include "GrTexture.h" 14 #include "GrRenderTarget.h" 15 16 17 /** 18 * Common baseclass that implements onLockPixels() by calling onReadPixels(). 19 * Since it has a copy, it always returns false for onLockPixelsAreWritable(). 20 */ 21 class SK_API SkROLockPixelsPixelRef : public SkPixelRef { 22 public: 23 SK_DECLARE_INST_COUNT(SkROLockPixelsPixelRef) 24 SkROLockPixelsPixelRef(const SkImageInfo&); 25 virtual ~SkROLockPixelsPixelRef(); 26 27 protected: 28 virtual bool onNewLockPixels(LockRec*) SK_OVERRIDE; 29 virtual void onUnlockPixels() SK_OVERRIDE; 30 virtual bool onLockPixelsAreWritable() const SK_OVERRIDE; // return false; 31 32 private: 33 SkBitmap fBitmap; 34 typedef SkPixelRef INHERITED; 35 }; 36 37 /** 38 * PixelRef that wraps a GrSurface 39 */ 40 class SK_API SkGrPixelRef : public SkROLockPixelsPixelRef { 41 public: 42 SK_DECLARE_INST_COUNT(SkGrPixelRef) 43 /** 44 * Constructs a pixel ref around a GrSurface. If the caller has locked the GrSurface in the 45 * cache and would like the pixel ref to unlock it in its destructor then transferCacheLock 46 * should be set to true. 47 */ 48 SkGrPixelRef(const SkImageInfo&, GrSurface*, bool transferCacheLock = false); 49 virtual ~SkGrPixelRef(); 50 51 // override from SkPixelRef 52 virtual GrTexture* getTexture() SK_OVERRIDE; 53 54 SK_DECLARE_UNFLATTENABLE_OBJECT() 55 56 protected: 57 // overrides from SkPixelRef 58 virtual bool onReadPixels(SkBitmap* dst, const SkIRect* subset) SK_OVERRIDE; 59 virtual SkPixelRef* deepCopy(SkColorType, const SkIRect* subset) SK_OVERRIDE; 60 61 private: 62 GrSurface* fSurface; 63 bool fUnlock; // if true the pixel ref owns a texture cache lock on fSurface 64 65 typedef SkROLockPixelsPixelRef INHERITED; 66 }; 67 68 #endif 69