diff options
author | 2014-08-29 07:50:23 -0700 | |
---|---|---|
committer | 2014-08-29 07:50:23 -0700 | |
commit | 32d0b3b5463c11032f12d03d993f11ea0af05959 (patch) | |
tree | 16c65c7dff0e80caf8c5448ab3f67b691e01edc9 /src/gpu | |
parent | 76273bb9ec2e93f58d2f62ec3993574c71cc56a6 (diff) |
Simplify SkGpuDevice construction
R=robertphillips@google.com, reed@google.com
Author: bsalomon@google.com
Review URL: https://codereview.chromium.org/506413004
Diffstat (limited to 'src/gpu')
-rw-r--r-- | src/gpu/SkGpuDevice.cpp | 40 |
1 files changed, 8 insertions, 32 deletions
diff --git a/src/gpu/SkGpuDevice.cpp b/src/gpu/SkGpuDevice.cpp index b3d154b7e2..b751c46c4a 100644 --- a/src/gpu/SkGpuDevice.cpp +++ b/src/gpu/SkGpuDevice.cpp @@ -134,44 +134,27 @@ public: SkGpuDevice* SkGpuDevice::Create(GrSurface* surface, unsigned flags) { SkASSERT(NULL != surface); - if (NULL == surface->asRenderTarget() || NULL == surface->getContext()) { + if (NULL == surface->asRenderTarget() || surface->wasDestroyed()) { return NULL; } - if (surface->asTexture()) { - return SkNEW_ARGS(SkGpuDevice, (surface->getContext(), surface->asTexture(), flags)); - } else { - return SkNEW_ARGS(SkGpuDevice, (surface->getContext(), surface->asRenderTarget(), flags)); - } -} - -SkGpuDevice::SkGpuDevice(GrContext* context, GrTexture* texture, unsigned flags) { - this->initFromRenderTarget(context, texture->asRenderTarget(), flags); + return SkNEW_ARGS(SkGpuDevice, (surface, flags)); } -SkGpuDevice::SkGpuDevice(GrContext* context, GrRenderTarget* renderTarget, unsigned flags) { - this->initFromRenderTarget(context, renderTarget, flags); -} +SkGpuDevice::SkGpuDevice(GrSurface* surface, unsigned flags) { -void SkGpuDevice::initFromRenderTarget(GrContext* context, - GrRenderTarget* renderTarget, - unsigned flags) { fDrawProcs = NULL; - fContext = context; - fContext->ref(); + fContext = SkRef(surface->getContext()); - fRenderTarget = NULL; fNeedClear = flags & kNeedClear_Flag; - SkASSERT(NULL != renderTarget); - fRenderTarget = renderTarget; - fRenderTarget->ref(); + fRenderTarget = SkRef(surface->asRenderTarget()); // Hold onto to the texture in the pixel ref (if there is one) because the texture holds a ref // on the RT but not vice-versa. // TODO: Remove this trickery once we figure out how to make SkGrPixelRef do this without // busting chrome (for a currently unknown reason). - GrSurface* surface = fRenderTarget->asTexture(); + surface = fRenderTarget->asTexture(); if (NULL == surface) { surface = fRenderTarget; } @@ -217,7 +200,7 @@ SkGpuDevice* SkGpuDevice::Create(GrContext* context, const SkImageInfo& origInfo return NULL; } - return SkNEW_ARGS(SkGpuDevice, (context, texture.get())); + return SkNEW_ARGS(SkGpuDevice, (texture.get())); } SkGpuDevice::~SkGpuDevice() { @@ -238,19 +221,12 @@ SkGpuDevice::~SkGpuDevice() { fContext->setClip(NULL); } - SkSafeUnref(fRenderTarget); + fRenderTarget->unref(); fContext->unref(); } /////////////////////////////////////////////////////////////////////////////// -void SkGpuDevice::makeRenderTargetCurrent() { - DO_DEFERRED_CLEAR(); - fContext->setRenderTarget(fRenderTarget); -} - -/////////////////////////////////////////////////////////////////////////////// - bool SkGpuDevice::onReadPixels(const SkImageInfo& dstInfo, void* dstPixels, size_t dstRowBytes, int x, int y) { DO_DEFERRED_CLEAR(); |