diff options
author | 2014-11-21 08:46:37 -0800 | |
---|---|---|
committer | 2014-11-21 08:46:38 -0800 | |
commit | 4af267b11964d4a8acdb232ac46094c84d890e88 (patch) | |
tree | d2fe846e9bc530cd0090b74a4096851a7ed7b9ea /src/image/SkImage_Gpu.cpp | |
parent | 41d2c2e434d11e73f66c597913c29ea1fb3fa879 (diff) |
add SkImage::newSurface
BUG=skia:
Review URL: https://codereview.chromium.org/741763002
Diffstat (limited to 'src/image/SkImage_Gpu.cpp')
-rw-r--r-- | src/image/SkImage_Gpu.cpp | 44 |
1 files changed, 27 insertions, 17 deletions
diff --git a/src/image/SkImage_Gpu.cpp b/src/image/SkImage_Gpu.cpp index de49d1e339..7a8da36d28 100644 --- a/src/image/SkImage_Gpu.cpp +++ b/src/image/SkImage_Gpu.cpp @@ -9,6 +9,7 @@ #include "SkImagePriv.h" #include "SkBitmap.h" #include "SkCanvas.h" +#include "SkSurface.h" #include "GrContext.h" #include "GrTexture.h" @@ -16,40 +17,40 @@ class SkImage_Gpu : public SkImage_Base { public: SK_DECLARE_INST_COUNT(SkImage_Gpu) - explicit SkImage_Gpu(const SkBitmap&); - virtual ~SkImage_Gpu(); + SkImage_Gpu(const SkBitmap&, int sampleCount); - virtual void onDraw(SkCanvas*, SkScalar x, SkScalar y, const SkPaint*) const SK_OVERRIDE; - virtual void onDrawRect(SkCanvas*, const SkRect* src, const SkRect& dst, - const SkPaint*) const SK_OVERRIDE; - virtual GrTexture* onGetTexture() const SK_OVERRIDE; - virtual bool getROPixels(SkBitmap*) const SK_OVERRIDE; + void onDraw(SkCanvas*, SkScalar x, SkScalar y, const SkPaint*) const SK_OVERRIDE; + void onDrawRect(SkCanvas*, const SkRect* src, const SkRect& dst, + const SkPaint*) const SK_OVERRIDE; + SkSurface* onNewSurface(const SkImageInfo&, const SkSurfaceProps&) const SK_OVERRIDE; + GrTexture* onGetTexture() const SK_OVERRIDE; + bool getROPixels(SkBitmap*) const SK_OVERRIDE; GrTexture* getTexture() const { return fBitmap.getTexture(); } - virtual SkShader* onNewShader(SkShader::TileMode, + SkShader* onNewShader(SkShader::TileMode, SkShader::TileMode, const SkMatrix* localMatrix) const SK_OVERRIDE; - virtual bool isOpaque() const SK_OVERRIDE; + bool isOpaque() const SK_OVERRIDE; private: SkBitmap fBitmap; + const int fSampleCount; // 0 if we weren't built from a surface typedef SkImage_Base INHERITED; }; /////////////////////////////////////////////////////////////////////////////// -SkImage_Gpu::SkImage_Gpu(const SkBitmap& bitmap) - : INHERITED(bitmap.width(), bitmap.height()) - , fBitmap(bitmap) { +SkImage_Gpu::SkImage_Gpu(const SkBitmap& bitmap, int sampleCount) + : INHERITED(bitmap.width(), bitmap.height(), NULL) + , fBitmap(bitmap) + , fSampleCount(sampleCount) +{ SkASSERT(fBitmap.getTexture()); } -SkImage_Gpu::~SkImage_Gpu() { -} - SkShader* SkImage_Gpu::onNewShader(SkShader::TileMode tileX, SkShader::TileMode tileY, const SkMatrix* localMatrix) const @@ -66,6 +67,11 @@ void SkImage_Gpu::onDrawRect(SkCanvas* canvas, const SkRect* src, const SkRect& canvas->drawBitmapRectToRect(fBitmap, src, dst, paint); } +SkSurface* SkImage_Gpu::onNewSurface(const SkImageInfo& info, const SkSurfaceProps& props) const { + GrContext* ctx = this->getTexture()->getContext(); + return SkSurface::NewRenderTarget(ctx, info, fSampleCount, &props); +} + GrTexture* SkImage_Gpu::onGetTexture() const { return fBitmap.getTexture(); } @@ -80,14 +86,18 @@ bool SkImage_Gpu::isOpaque() const { /////////////////////////////////////////////////////////////////////////////// -SkImage* SkImage::NewTexture(const SkBitmap& bitmap) { +SkImage* SkNewImageFromBitmapTexture(const SkBitmap& bitmap, int sampleCount) { if (NULL == bitmap.getTexture()) { return NULL; } + return SkNEW_ARGS(SkImage_Gpu, (bitmap, sampleCount)); +} - return SkNEW_ARGS(SkImage_Gpu, (bitmap)); +SkImage* SkImage::NewTexture(const SkBitmap& bitmap) { + return SkNewImageFromBitmapTexture(bitmap, 0); } GrTexture* SkTextureImageGetTexture(SkImage* image) { return ((SkImage_Gpu*)image)->getTexture(); } + |