1 2 /* 3 * Copyright 2010 Google Inc. 4 * 5 * Use of this source code is governed by a BSD-style license that can be 6 * found in the LICENSE file. 7 */ 8 9 10 11 #ifndef SkGrTexturePixelRef_DEFINED 12 #define SkGrTexturePixelRef_DEFINED 13 14 #include "SkBitmap.h" 15 #include "SkPixelRef.h" 16 #include "GrTexture.h" 17 #include "GrRenderTarget.h" 18 19 20 /** 21 * Common baseclass that implements onLockPixels() by calling onReadPixels(). 22 * Since it has a copy, it always returns false for onLockPixelsAreWritable(). 23 */ 24 class SK_API SkROLockPixelsPixelRef : public SkPixelRef { 25 public: 26 SkROLockPixelsPixelRef(); 27 virtual ~SkROLockPixelsPixelRef(); 28 29 protected: 30 // override from SkPixelRef 31 virtual void* onLockPixels(SkColorTable** ptr); 32 virtual void onUnlockPixels(); 33 virtual bool onLockPixelsAreWritable() const; // return false; 34 35 private: 36 SkBitmap fBitmap; 37 typedef SkPixelRef INHERITED; 38 }; 39 40 /** 41 * PixelRef that wraps a GrTexture 42 */ 43 class SK_API SkGrTexturePixelRef : public SkROLockPixelsPixelRef { 44 public: 45 SkGrTexturePixelRef(GrTexture*); 46 virtual ~SkGrTexturePixelRef(); 47 48 // override from SkPixelRef 49 virtual SkGpuTexture* getTexture(); 50 51 protected: 52 // override from SkPixelRef 53 virtual bool onReadPixels(SkBitmap* dst, const SkIRect* subset); 54 55 // override from SkPixelRef 56 virtual SkPixelRef* deepCopy(SkBitmap::Config dstConfig) SK_OVERRIDE; 57 58 private: 59 GrTexture* fTexture; 60 typedef SkROLockPixelsPixelRef INHERITED; 61 }; 62 63 /** 64 * PixelRef that wraps a GrRenderTarget 65 */ 66 class SK_API SkGrRenderTargetPixelRef : public SkROLockPixelsPixelRef { 67 public: 68 SkGrRenderTargetPixelRef(GrRenderTarget* rt); 69 virtual ~SkGrRenderTargetPixelRef(); 70 71 // override from SkPixelRef 72 virtual SkGpuTexture* getTexture(); 73 74 protected: 75 // override from SkPixelRef 76 virtual bool onReadPixels(SkBitmap* dst, const SkIRect* subset); 77 78 // override from SkPixelRef 79 virtual SkPixelRef* deepCopy(SkBitmap::Config dstConfig) SK_OVERRIDE; 80 81 private: 82 GrRenderTarget* fRenderTarget; 83 typedef SkROLockPixelsPixelRef INHERITED; 84 }; 85 86 #endif 87 88