diff options
Diffstat (limited to 'gpu/src/GrRenderTarget.cpp')
-rw-r--r-- | gpu/src/GrRenderTarget.cpp | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/gpu/src/GrRenderTarget.cpp b/gpu/src/GrRenderTarget.cpp new file mode 100644 index 0000000000..186fe8e552 --- /dev/null +++ b/gpu/src/GrRenderTarget.cpp @@ -0,0 +1,58 @@ + +/* + * 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" + +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); + } + return fWidth * fHeight * (fStencilBits + colorBits); +} + +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(); + } + } +}
\ No newline at end of file |