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 */
21class SK_API SkROLockPixelsPixelRef : public SkPixelRef {
22public:
23    SkROLockPixelsPixelRef(const SkImageInfo&);
24    virtual ~SkROLockPixelsPixelRef();
25
26protected:
27    bool onNewLockPixels(LockRec*) override;
28    void onUnlockPixels() override;
29    bool onLockPixelsAreWritable() const override;   // return false;
30
31private:
32    SkBitmap    fBitmap;
33    typedef SkPixelRef INHERITED;
34};
35
36/**
37 *  PixelRef that wraps a GrSurface
38 */
39class SK_API SkGrPixelRef : public SkROLockPixelsPixelRef {
40public:
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
50protected:
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
57private:
58    GrSurface*  fSurface;
59    typedef SkROLockPixelsPixelRef INHERITED;
60};
61
62#endif
63