1277938fcee03695a85f5cdf4f6b076e2bb1e55f2reed@google.com
25bb6825f10d64834ad1d1d967f590aebae285360epoger@google.com/*
35bb6825f10d64834ad1d1d967f590aebae285360epoger@google.com * Copyright 2010 Google Inc.
45bb6825f10d64834ad1d1d967f590aebae285360epoger@google.com *
55bb6825f10d64834ad1d1d967f590aebae285360epoger@google.com * Use of this source code is governed by a BSD-style license that can be
65bb6825f10d64834ad1d1d967f590aebae285360epoger@google.com * found in the LICENSE file.
7277938fcee03695a85f5cdf4f6b076e2bb1e55f2reed@google.com */
8277938fcee03695a85f5cdf4f6b076e2bb1e55f2reed@google.com
9277938fcee03695a85f5cdf4f6b076e2bb1e55f2reed@google.com
105bb6825f10d64834ad1d1d967f590aebae285360epoger@google.com
114e0aa2c872d1cec30c992c4690611bfa34d6604arobertphillips@google.com#ifndef SkGrPixelRef_DEFINED
124e0aa2c872d1cec30c992c4690611bfa34d6604arobertphillips@google.com#define SkGrPixelRef_DEFINED
13277938fcee03695a85f5cdf4f6b076e2bb1e55f2reed@google.com
140ca13cbca1547eca7aad951f738bc95e3cff5862reed@google.com#include "SkBitmap.h"
15277938fcee03695a85f5cdf4f6b076e2bb1e55f2reed@google.com#include "SkPixelRef.h"
161be44c62957f0a860d5b98c173514f7134fdf82dbsalomon@google.com#include "GrTexture.h"
171be44c62957f0a860d5b98c173514f7134fdf82dbsalomon@google.com#include "GrRenderTarget.h"
181be44c62957f0a860d5b98c173514f7134fdf82dbsalomon@google.com
19277938fcee03695a85f5cdf4f6b076e2bb1e55f2reed@google.com
200ca13cbca1547eca7aad951f738bc95e3cff5862reed@google.com/**
210ca13cbca1547eca7aad951f738bc95e3cff5862reed@google.com *  Common baseclass that implements onLockPixels() by calling onReadPixels().
220ca13cbca1547eca7aad951f738bc95e3cff5862reed@google.com *  Since it has a copy, it always returns false for onLockPixelsAreWritable().
230ca13cbca1547eca7aad951f738bc95e3cff5862reed@google.com */
2461fc467855f7bb5e44492e41ddb8b5e48a04918fsenorblanco@chromium.orgclass SK_API SkROLockPixelsPixelRef : public SkPixelRef {
250ca13cbca1547eca7aad951f738bc95e3cff5862reed@google.compublic:
260ca13cbca1547eca7aad951f738bc95e3cff5862reed@google.com    SkROLockPixelsPixelRef();
270ca13cbca1547eca7aad951f738bc95e3cff5862reed@google.com    virtual ~SkROLockPixelsPixelRef();
280ca13cbca1547eca7aad951f738bc95e3cff5862reed@google.com
290ca13cbca1547eca7aad951f738bc95e3cff5862reed@google.comprotected:
300ca13cbca1547eca7aad951f738bc95e3cff5862reed@google.com    // override from SkPixelRef
310ca13cbca1547eca7aad951f738bc95e3cff5862reed@google.com    virtual void* onLockPixels(SkColorTable** ptr);
320ca13cbca1547eca7aad951f738bc95e3cff5862reed@google.com    virtual void onUnlockPixels();
330ca13cbca1547eca7aad951f738bc95e3cff5862reed@google.com    virtual bool onLockPixelsAreWritable() const;   // return false;
340ca13cbca1547eca7aad951f738bc95e3cff5862reed@google.com
350ca13cbca1547eca7aad951f738bc95e3cff5862reed@google.comprivate:
360ca13cbca1547eca7aad951f738bc95e3cff5862reed@google.com    SkBitmap    fBitmap;
370ca13cbca1547eca7aad951f738bc95e3cff5862reed@google.com    typedef SkPixelRef INHERITED;
380ca13cbca1547eca7aad951f738bc95e3cff5862reed@google.com};
390ca13cbca1547eca7aad951f738bc95e3cff5862reed@google.com
400ca13cbca1547eca7aad951f738bc95e3cff5862reed@google.com/**
414e0aa2c872d1cec30c992c4690611bfa34d6604arobertphillips@google.com *  PixelRef that wraps a GrSurface
420ca13cbca1547eca7aad951f738bc95e3cff5862reed@google.com */
434e0aa2c872d1cec30c992c4690611bfa34d6604arobertphillips@google.comclass SK_API SkGrPixelRef : public SkROLockPixelsPixelRef {
44277938fcee03695a85f5cdf4f6b076e2bb1e55f2reed@google.compublic:
45ae0589cd486ca3440c667b67b3d86500a6405ec0bsalomon@google.com    /**
46ae0589cd486ca3440c667b67b3d86500a6405ec0bsalomon@google.com     * Constructs a pixel ref around a GrSurface. If the caller has locked the GrSurface in the
47ae0589cd486ca3440c667b67b3d86500a6405ec0bsalomon@google.com     * cache and would like the pixel ref to unlock it in its destructor then transferCacheLock
48ae0589cd486ca3440c667b67b3d86500a6405ec0bsalomon@google.com     * should be set to true.
49ae0589cd486ca3440c667b67b3d86500a6405ec0bsalomon@google.com     */
50ae0589cd486ca3440c667b67b3d86500a6405ec0bsalomon@google.com    SkGrPixelRef(GrSurface* surface, bool transferCacheLock = false);
514e0aa2c872d1cec30c992c4690611bfa34d6604arobertphillips@google.com    virtual ~SkGrPixelRef();
52277938fcee03695a85f5cdf4f6b076e2bb1e55f2reed@google.com
53277938fcee03695a85f5cdf4f6b076e2bb1e55f2reed@google.com    // override from SkPixelRef
54b7edb1901f313c4df4ddaafa84f5a1cf8f13dd02commit-bot@chromium.org    virtual GrTexture* getTexture() SK_OVERRIDE;
55277938fcee03695a85f5cdf4f6b076e2bb1e55f2reed@google.com
566197297e08fe5e00209cc68e8fbbce006bdc4547djsollen@google.com    SK_DECLARE_UNFLATTENABLE_OBJECT()
576197297e08fe5e00209cc68e8fbbce006bdc4547djsollen@google.com
58277938fcee03695a85f5cdf4f6b076e2bb1e55f2reed@google.comprotected:
594e0aa2c872d1cec30c992c4690611bfa34d6604arobertphillips@google.com    // overrides from SkPixelRef
604e0aa2c872d1cec30c992c4690611bfa34d6604arobertphillips@google.com    virtual bool onReadPixels(SkBitmap* dst, const SkIRect* subset) SK_OVERRIDE;
6150885adee7bfd84fdf7d9248bf4d6afeb476583escroggo@google.com    virtual SkPixelRef* deepCopy(SkBitmap::Config dstConfig, const SkIRect* subset) SK_OVERRIDE;
6224b7b2b4069e64b0a47987912a19a8e06955fa7esenorblanco@chromium.org
63d4fe1561225a4c4769a0dc0b54d4aceaca45791fbsalomon@google.comprivate:
644e0aa2c872d1cec30c992c4690611bfa34d6604arobertphillips@google.com    GrSurface*  fSurface;
65ae0589cd486ca3440c667b67b3d86500a6405ec0bsalomon@google.com    bool        fUnlock;   // if true the pixel ref owns a texture cache lock on fSurface
66ae0589cd486ca3440c667b67b3d86500a6405ec0bsalomon@google.com
670ca13cbca1547eca7aad951f738bc95e3cff5862reed@google.com    typedef SkROLockPixelsPixelRef INHERITED;
68d4fe1561225a4c4769a0dc0b54d4aceaca45791fbsalomon@google.com};
69d4fe1561225a4c4769a0dc0b54d4aceaca45791fbsalomon@google.com
70277938fcee03695a85f5cdf4f6b076e2bb1e55f2reed@google.com#endif
71