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     SK_DECLARE_UNFLATTENABLE_OBJECT()
     55 
     56 protected:
     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 
     61 private:
     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