/* * 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(); }