gfx/skia/trunk/include/gpu/SkGrPixelRef.h

branch
TOR_BUG_3246
changeset 7
129ffea94266
equal deleted inserted replaced
-1:000000000000 0:96a711af3f27
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(SkBitmap::Config dstConfig, 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

mercurial