diff options
author | bsalomon@google.com <bsalomon@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2011-10-12 19:53:16 +0000 |
---|---|---|
committer | bsalomon@google.com <bsalomon@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2011-10-12 19:53:16 +0000 |
commit | d38f137e9b813f8193675ebd3dfbfe8bc42639e9 (patch) | |
tree | 1e670c378d7b31a4538fde3c2b3e4e29b72c05b5 /src/gpu/GrRenderTarget.cpp | |
parent | 4d5cb45f3e3e62633304b4911d131cdd02dfd541 (diff) |
Move gpu/include/* to include/gpu and gpu/src/* to src/gpu
Review URL: http://codereview.appspot.com/5250070/
git-svn-id: http://skia.googlecode.com/svn/trunk@2471 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/gpu/GrRenderTarget.cpp')
-rw-r--r-- | src/gpu/GrRenderTarget.cpp | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/src/gpu/GrRenderTarget.cpp b/src/gpu/GrRenderTarget.cpp new file mode 100644 index 0000000000..a5f1216571 --- /dev/null +++ b/src/gpu/GrRenderTarget.cpp @@ -0,0 +1,75 @@ + +/* + * Copyright 2011 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + + +#include "GrRenderTarget.h" + +#include "GrContext.h" +#include "GrGpu.h" +#include "GrStencilBuffer.h" + +bool GrRenderTarget::readPixels(int left, int top, int width, int height, + GrPixelConfig config, void* buffer) { + // go through context so that all necessary flushing occurs + GrContext* context = this->getGpu()->getContext(); + GrAssert(NULL != context); + return context->readRenderTargetPixels(this, + left, top, + width, height, + config, buffer); +} + +size_t GrRenderTarget::sizeInBytes() const { + int colorBits; + if (kUnknown_GrPixelConfig == fConfig) { + colorBits = 32; // don't know, make a guess + } else { + colorBits = GrBytesPerPixel(fConfig); + } + uint64_t size = fAllocatedWidth; + size *= fAllocatedHeight; + size *= colorBits; + size *= GrMax(1,fSampleCnt); + return (size_t)(size / 8); +} + +void GrRenderTarget::flagAsNeedingResolve(const GrIRect* rect) { + if (kCanResolve_ResolveType == getResolveType()) { + if (NULL != rect) { + fResolveRect.join(*rect); + if (!fResolveRect.intersect(0, 0, this->width(), this->height())) { + fResolveRect.setEmpty(); + } + } else { + fResolveRect.setLTRB(0, 0, this->width(), this->height()); + } + } +} + +void GrRenderTarget::overrideResolveRect(const GrIRect rect) { + fResolveRect = rect; + if (fResolveRect.isEmpty()) { + fResolveRect.setLargestInverted(); + } else { + if (!fResolveRect.intersect(0, 0, this->width(), this->height())) { + fResolveRect.setLargestInverted(); + } + } +} + +void GrRenderTarget::setStencilBuffer(GrStencilBuffer* stencilBuffer) { + if (NULL != fStencilBuffer) { + fStencilBuffer->wasDetachedFromRenderTarget(this); + fStencilBuffer->unref(); + } + fStencilBuffer = stencilBuffer; + if (NULL != fStencilBuffer) { + fStencilBuffer->wasAttachedToRenderTarget(this); + fStencilBuffer->ref(); + } +} |