| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2012 Google Inc. | 2 * Copyright 2012 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 #include "GrSurface.h" | 8 #include "GrSurface.h" |
| 9 #include "GrSurfacePriv.h" | 9 #include "GrSurfacePriv.h" |
| 10 | 10 |
| 11 #include "SkBitmap.h" | 11 #include "SkBitmap.h" |
| 12 #include "SkGr.h" | 12 #include "SkGr.h" |
| 13 #include "SkImageEncoder.h" | 13 #include "SkImageEncoder.h" |
| 14 #include <stdio.h> | 14 #include <stdio.h> |
| 15 | 15 |
| 16 size_t GrSurface::WorseCaseSize(const GrSurfaceDesc& desc) { |
| 17 size_t size; |
| 18 |
| 19 bool isRenderTarget = SkToBool(desc.fFlags & kRenderTarget_GrSurfaceFlag); |
| 20 if (isRenderTarget) { |
| 21 // We own one color value for each MSAA sample. |
| 22 int colorValuesPerPixel = SkTMax(1, desc.fSampleCnt); |
| 23 if (desc.fSampleCnt) { |
| 24 // Worse case, we own the resolve buffer so that is one more sample
per pixel. |
| 25 colorValuesPerPixel += 1; |
| 26 } |
| 27 SkASSERT(kUnknown_GrPixelConfig != desc.fConfig); |
| 28 SkASSERT(!GrPixelConfigIsCompressed(desc.fConfig)); |
| 29 size_t colorBytes = GrBytesPerPixel(desc.fConfig); |
| 30 SkASSERT(colorBytes > 0); |
| 31 size = colorValuesPerPixel * desc.fWidth * desc.fHeight * colorBytes; |
| 32 } else { |
| 33 if (GrPixelConfigIsCompressed(desc.fConfig)) { |
| 34 size = GrCompressedFormatDataSize(desc.fConfig, desc.fWidth, desc.fH
eight); |
| 35 } else { |
| 36 size = (size_t) desc.fWidth * desc.fHeight * GrBytesPerPixel(desc.fC
onfig); |
| 37 } |
| 38 |
| 39 size += size/3; // in case we have to mipmap |
| 40 } |
| 41 |
| 42 return size; |
| 43 } |
| 44 |
| 16 template<typename T> static bool adjust_params(int surfaceWidth, | 45 template<typename T> static bool adjust_params(int surfaceWidth, |
| 17 int surfaceHeight, | 46 int surfaceHeight, |
| 18 size_t bpp, | 47 size_t bpp, |
| 19 int* left, int* top, int* width,
int* height, | 48 int* left, int* top, int* width,
int* height, |
| 20 T** data, | 49 T** data, |
| 21 size_t* rowBytes) { | 50 size_t* rowBytes) { |
| 22 if (!*rowBytes) { | 51 if (!*rowBytes) { |
| 23 *rowBytes = *width * bpp; | 52 *rowBytes = *width * bpp; |
| 24 } | 53 } |
| 25 | 54 |
| (...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 173 | 202 |
| 174 void GrSurface::onRelease() { | 203 void GrSurface::onRelease() { |
| 175 this->invokeReleaseProc(); | 204 this->invokeReleaseProc(); |
| 176 this->INHERITED::onRelease(); | 205 this->INHERITED::onRelease(); |
| 177 } | 206 } |
| 178 | 207 |
| 179 void GrSurface::onAbandon() { | 208 void GrSurface::onAbandon() { |
| 180 this->invokeReleaseProc(); | 209 this->invokeReleaseProc(); |
| 181 this->INHERITED::onAbandon(); | 210 this->INHERITED::onAbandon(); |
| 182 } | 211 } |
| OLD | NEW |