| /* |
| * Copyright 2012 Google Inc. |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #include "src/core/SkCompressedDataUtils.h" |
| #include "src/gpu/GrBackendUtils.h" |
| #include "src/gpu/GrRenderTarget.h" |
| #include "src/gpu/GrResourceProvider.h" |
| #include "src/gpu/GrSurface.h" |
| #include "src/gpu/GrTexture.h" |
| |
| #include "src/core/SkMathPriv.h" |
| #include "src/gpu/SkGr.h" |
| |
| size_t GrSurface::ComputeSize(const GrBackendFormat& format, |
| SkISize dimensions, |
| int colorSamplesPerPixel, |
| GrMipmapped mipMapped, |
| bool binSize) { |
| // For external formats we do not actually know the real size of the resource so we just return |
| // 0 here to indicate this. |
| if (format.textureType() == GrTextureType::kExternal) { |
| return 0; |
| } |
| |
| size_t colorSize; |
| |
| if (binSize) { |
| dimensions = GrResourceProvider::MakeApprox(dimensions); |
| } |
| |
| SkImage::CompressionType compressionType = GrBackendFormatToCompressionType(format); |
| if (compressionType != SkImage::CompressionType::kNone) { |
| colorSize = SkCompressedFormatDataSize(compressionType, dimensions, |
| mipMapped == GrMipmapped::kYes); |
| } else { |
| colorSize = (size_t)dimensions.width() * dimensions.height() * |
| GrBackendFormatBytesPerPixel(format); |
| } |
| SkASSERT(colorSize > 0); |
| |
| size_t finalSize = colorSamplesPerPixel * colorSize; |
| |
| if (GrMipmapped::kYes == mipMapped) { |
| // We don't have to worry about the mipmaps being a different dimensions than |
| // we'd expect because we never change fDesc.fWidth/fHeight. |
| finalSize += colorSize/3; |
| } |
| return finalSize; |
| } |
| |
| ////////////////////////////////////////////////////////////////////////////// |
| |
| void GrSurface::onRelease() { |
| this->invokeReleaseProc(); |
| this->INHERITED::onRelease(); |
| } |
| |
| void GrSurface::onAbandon() { |
| this->invokeReleaseProc(); |
| this->INHERITED::onAbandon(); |
| } |