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 SkROLockPixelsPixelRef(const SkImageInfo&); 24 virtual ~SkROLockPixelsPixelRef(); 25 26 protected: 27 bool onNewLockPixels(LockRec*) override; 28 void onUnlockPixels() override; 29 bool onLockPixelsAreWritable() const override; // return false; 30 31 private: 32 SkBitmap fBitmap; 33 typedef SkPixelRef INHERITED; 34 }; 35 36 /** 37 * PixelRef that wraps a GrSurface 38 */ 39 class SK_API SkGrPixelRef : public SkROLockPixelsPixelRef { 40 public: 41 /** 42 * Constructs a pixel ref around a GrSurface. 43 */ 44 SkGrPixelRef(const SkImageInfo&, GrSurface*); 45 virtual ~SkGrPixelRef(); 46 47 // override from SkPixelRef 48 GrTexture* getTexture() override; 49 50 protected: 51 // overrides from SkPixelRef 52 bool onReadPixels(SkBitmap* dst, SkColorType, const SkIRect* subset) override; 53 SkPixelRef* deepCopy(SkColorType, SkColorProfileType, 54 const SkIRect* subset) override; 55 void onNotifyPixelsChanged() override; 56 57 private: 58 GrSurface* fSurface; 59 typedef SkROLockPixelsPixelRef INHERITED; 60 }; 61 62 #endif 63