Home | History | Annotate | Download | only in gpu
      1 
      2 /*
      3  * Copyright 2010 Google Inc.
      4  *
      5  * Use of this source code is governed by a BSD-style license that can be
      6  * found in the LICENSE file.
      7  */
      8 
      9 
     10 
     11 #ifndef SkGrTexturePixelRef_DEFINED
     12 #define SkGrTexturePixelRef_DEFINED
     13 
     14 #include "SkBitmap.h"
     15 #include "SkPixelRef.h"
     16 #include "GrTexture.h"
     17 #include "GrRenderTarget.h"
     18 
     19 
     20 /**
     21  *  Common baseclass that implements onLockPixels() by calling onReadPixels().
     22  *  Since it has a copy, it always returns false for onLockPixelsAreWritable().
     23  */
     24 class SK_API SkROLockPixelsPixelRef : public SkPixelRef {
     25 public:
     26     SkROLockPixelsPixelRef();
     27     virtual ~SkROLockPixelsPixelRef();
     28 
     29 protected:
     30     // override from SkPixelRef
     31     virtual void* onLockPixels(SkColorTable** ptr);
     32     virtual void onUnlockPixels();
     33     virtual bool onLockPixelsAreWritable() const;   // return false;
     34 
     35 private:
     36     SkBitmap    fBitmap;
     37     typedef SkPixelRef INHERITED;
     38 };
     39 
     40 /**
     41  *  PixelRef that wraps a GrTexture
     42  */
     43 class SK_API SkGrTexturePixelRef : public SkROLockPixelsPixelRef {
     44 public:
     45             SkGrTexturePixelRef(GrTexture*);
     46     virtual ~SkGrTexturePixelRef();
     47 
     48     // override from SkPixelRef
     49     virtual SkGpuTexture* getTexture();
     50 
     51 protected:
     52     // override from SkPixelRef
     53     virtual bool onReadPixels(SkBitmap* dst, const SkIRect* subset);
     54 
     55     // override from SkPixelRef
     56     virtual SkPixelRef* deepCopy(SkBitmap::Config dstConfig) SK_OVERRIDE;
     57 
     58 private:
     59     GrTexture*  fTexture;
     60     typedef SkROLockPixelsPixelRef INHERITED;
     61 };
     62 
     63 /**
     64  *  PixelRef that wraps a GrRenderTarget
     65  */
     66 class SK_API SkGrRenderTargetPixelRef : public SkROLockPixelsPixelRef {
     67 public:
     68             SkGrRenderTargetPixelRef(GrRenderTarget* rt);
     69     virtual ~SkGrRenderTargetPixelRef();
     70 
     71     // override from SkPixelRef
     72     virtual SkGpuTexture* getTexture();
     73 
     74 protected:
     75     // override from SkPixelRef
     76     virtual bool onReadPixels(SkBitmap* dst, const SkIRect* subset);
     77 
     78     // override from SkPixelRef
     79     virtual SkPixelRef* deepCopy(SkBitmap::Config dstConfig) SK_OVERRIDE;
     80 
     81 private:
     82     GrRenderTarget*  fRenderTarget;
     83     typedef SkROLockPixelsPixelRef INHERITED;
     84 };
     85 
     86 #endif
     87 
     88