blob: fd0e750ec1ca9138cd3049b43013ea9ee389bee3 [file] [log] [blame]
epoger@google.comec3ed6a2011-07-28 14:26:00 +00001
reed@google.comac10a2d2010-12-22 21:39:39 +00002/*
epoger@google.comec3ed6a2011-07-28 14:26:00 +00003 * 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.
reed@google.comac10a2d2010-12-22 21:39:39 +00007 */
8
9
epoger@google.comec3ed6a2011-07-28 14:26:00 +000010
reed@google.comac10a2d2010-12-22 21:39:39 +000011#ifndef SkGrTexturePixelRef_DEFINED
12#define SkGrTexturePixelRef_DEFINED
13
reed@google.com9c49bc32011-07-07 13:42:37 +000014#include "SkBitmap.h"
reed@google.comac10a2d2010-12-22 21:39:39 +000015#include "SkPixelRef.h"
bsalomon@google.combbfa1002011-08-16 15:13:54 +000016#include "GrTexture.h"
17#include "GrRenderTarget.h"
18
reed@google.comac10a2d2010-12-22 21:39:39 +000019
reed@google.com9c49bc32011-07-07 13:42:37 +000020/**
21 * Common baseclass that implements onLockPixels() by calling onReadPixels().
22 * Since it has a copy, it always returns false for onLockPixelsAreWritable().
23 */
senorblanco@chromium.org29767652012-02-08 20:27:16 +000024class SK_API SkROLockPixelsPixelRef : public SkPixelRef {
reed@google.com9c49bc32011-07-07 13:42:37 +000025public:
26 SkROLockPixelsPixelRef();
27 virtual ~SkROLockPixelsPixelRef();
28
29protected:
30 // override from SkPixelRef
31 virtual void* onLockPixels(SkColorTable** ptr);
32 virtual void onUnlockPixels();
33 virtual bool onLockPixelsAreWritable() const; // return false;
34
35private:
36 SkBitmap fBitmap;
37 typedef SkPixelRef INHERITED;
38};
39
40/**
41 * PixelRef that wraps a GrTexture
42 */
senorblanco@chromium.org29767652012-02-08 20:27:16 +000043class SK_API SkGrTexturePixelRef : public SkROLockPixelsPixelRef {
reed@google.comac10a2d2010-12-22 21:39:39 +000044public:
45 SkGrTexturePixelRef(GrTexture*);
46 virtual ~SkGrTexturePixelRef();
47
48 // override from SkPixelRef
reed@google.com9c49bc32011-07-07 13:42:37 +000049 virtual SkGpuTexture* getTexture();
reed@google.comac10a2d2010-12-22 21:39:39 +000050
djsollen@google.com5370cd92012-03-28 20:47:01 +000051 SK_DECLARE_UNFLATTENABLE_OBJECT()
52
reed@google.comac10a2d2010-12-22 21:39:39 +000053protected:
54 // override from SkPixelRef
reed@google.com50dfa012011-04-01 19:05:36 +000055 virtual bool onReadPixels(SkBitmap* dst, const SkIRect* subset);
reed@google.comac10a2d2010-12-22 21:39:39 +000056
senorblanco@chromium.orgef843cd2011-12-02 19:11:17 +000057 // override from SkPixelRef
58 virtual SkPixelRef* deepCopy(SkBitmap::Config dstConfig) SK_OVERRIDE;
59
reed@google.comac10a2d2010-12-22 21:39:39 +000060private:
61 GrTexture* fTexture;
reed@google.com9c49bc32011-07-07 13:42:37 +000062 typedef SkROLockPixelsPixelRef INHERITED;
reed@google.comac10a2d2010-12-22 21:39:39 +000063};
64
reed@google.com9c49bc32011-07-07 13:42:37 +000065/**
66 * PixelRef that wraps a GrRenderTarget
67 */
senorblanco@chromium.org29767652012-02-08 20:27:16 +000068class SK_API SkGrRenderTargetPixelRef : public SkROLockPixelsPixelRef {
bsalomon@google.com669fdc42011-04-05 17:08:27 +000069public:
70 SkGrRenderTargetPixelRef(GrRenderTarget* rt);
71 virtual ~SkGrRenderTargetPixelRef();
72
73 // override from SkPixelRef
74 virtual SkGpuTexture* getTexture();
75
djsollen@google.com5370cd92012-03-28 20:47:01 +000076 SK_DECLARE_UNFLATTENABLE_OBJECT()
77
bsalomon@google.com669fdc42011-04-05 17:08:27 +000078protected:
79 // override from SkPixelRef
bsalomon@google.com669fdc42011-04-05 17:08:27 +000080 virtual bool onReadPixels(SkBitmap* dst, const SkIRect* subset);
81
senorblanco@chromium.orgef843cd2011-12-02 19:11:17 +000082 // override from SkPixelRef
83 virtual SkPixelRef* deepCopy(SkBitmap::Config dstConfig) SK_OVERRIDE;
84
bsalomon@google.com669fdc42011-04-05 17:08:27 +000085private:
86 GrRenderTarget* fRenderTarget;
reed@google.com9c49bc32011-07-07 13:42:37 +000087 typedef SkROLockPixelsPixelRef INHERITED;
bsalomon@google.com669fdc42011-04-05 17:08:27 +000088};
89
reed@google.comac10a2d2010-12-22 21:39:39 +000090#endif
91