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