• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 protected:
55     // overrides from SkPixelRef
56     virtual bool onReadPixels(SkBitmap* dst, const SkIRect* subset) SK_OVERRIDE;
57     virtual SkPixelRef* deepCopy(SkColorType, const SkIRect* subset) SK_OVERRIDE;
58 
59 private:
60     GrSurface*  fSurface;
61     bool        fUnlock;   // if true the pixel ref owns a texture cache lock on fSurface
62 
63     typedef SkROLockPixelsPixelRef INHERITED;
64 };
65 
66 #endif
67