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 SK_DECLARE_INST_COUNT(SkROLockPixelsPixelRef) 24 SkROLockPixelsPixelRef(const SkImageInfo&); 25 virtual ~SkROLockPixelsPixelRef(); 26 27protected: 28 virtual bool onNewLockPixels(LockRec*) SK_OVERRIDE; 29 virtual void onUnlockPixels() SK_OVERRIDE; 30 virtual bool onLockPixelsAreWritable() const SK_OVERRIDE; // return false; 31 32private: 33 SkBitmap fBitmap; 34 typedef SkPixelRef INHERITED; 35}; 36 37/** 38 * PixelRef that wraps a GrSurface 39 */ 40class SK_API SkGrPixelRef : public SkROLockPixelsPixelRef { 41public: 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 56protected: 57 // overrides from SkPixelRef 58 virtual bool onReadPixels(SkBitmap* dst, const SkIRect* subset) SK_OVERRIDE; 59 virtual SkPixelRef* deepCopy(SkColorType, const SkIRect* subset) SK_OVERRIDE; 60 61private: 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 69