Home | History | Annotate | Download | only in gpu
      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  */
     21 class SK_API SkROLockPixelsPixelRef : public SkPixelRef {
     22 public:
     23     SK_DECLARE_INST_COUNT(SkROLockPixelsPixelRef)
     24     SkROLockPixelsPixelRef(const SkImageInfo&);
     25     virtual ~SkROLockPixelsPixelRef();
     26 
     27 protected:
     28     virtual bool onNewLockPixels(LockRec*) SK_OVERRIDE;
     29     virtual void onUnlockPixels() SK_OVERRIDE;
     30     virtual bool onLockPixelsAreWritable() const SK_OVERRIDE;   // return false;
     31 
     32 private:
     33     SkBitmap    fBitmap;
     34     typedef SkPixelRef INHERITED;
     35 };
     36 
     37 /**
     38  *  PixelRef that wraps a GrSurface
     39  */
     40 class SK_API SkGrPixelRef : public SkROLockPixelsPixelRef {
     41 public:
     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 protected:
     55     // overrides from SkPixelRef
     56     virtual bool onReadPixels(SkBitmap* dst, const SkIRect* subset) SK_OVERRIDE;
     57     virtual SkPixelRef* deepCopy(SkColorType, const SkIRect* subset) SK_OVERRIDE;
     58 
     59 private:
     60     GrSurface*  fSurface;
     61     bool        fUnlock;   // if true the pixel ref owns a texture cache lock on fSurface
     62 
     63     typedef SkROLockPixelsPixelRef INHERITED;
     64 };
     65 
     66 #endif
     67