/** * Get a texture (from the texture cache) of the correct size & format. * Return true on success; false on failure. */ bool GrSWMaskHelper::getTexture(GrAutoScratchTexture* texture) { GrTextureDesc desc; desc.fWidth = fBM.width(); desc.fHeight = fBM.height(); desc.fConfig = kAlpha_8_GrPixelConfig; if (fCompressMask) { #ifdef SK_DEBUG int dimX, dimY; SkTextureCompressor::GetBlockDimensions(fCompressedFormat, &dimX, &dimY); SkASSERT((desc.fWidth % dimX) == 0); SkASSERT((desc.fHeight % dimY) == 0); #endif desc.fConfig = fmt_to_config(fCompressedFormat); // If this config isn't supported then we should fall back to A8 if (!(fContext->getGpu()->caps()->isConfigTexturable(desc.fConfig))) { SkDEBUGFAIL("Determining compression should be set from choose_compressed_fmt"); desc.fConfig = kAlpha_8_GrPixelConfig; } } texture->set(fContext, desc); return NULL != texture->texture(); }
void GrSWMaskHelper::compressTextureData(GrTexture *texture, const GrSurfaceDesc& desc) { SkASSERT(GrPixelConfigIsCompressed(desc.fConfig)); SkASSERT(fmt_to_config(fCompressedFormat) == desc.fConfig); SkAutoDataUnref cmpData(SkTextureCompressor::CompressBitmapToFormat(fBM, fCompressedFormat)); SkASSERT(cmpData); this->sendTextureData(texture, desc, cmpData->data(), 0); }
/** * Get a texture (from the texture cache) of the correct size & format. */ GrTexture* GrSWMaskHelper::createTexture() { GrSurfaceDesc desc; desc.fWidth = fBM.width(); desc.fHeight = fBM.height(); desc.fConfig = kAlpha_8_GrPixelConfig; if (kNone_CompressionMode != fCompressionMode) { #ifdef SK_DEBUG int dimX, dimY; SkTextureCompressor::GetBlockDimensions(fCompressedFormat, &dimX, &dimY); SkASSERT((desc.fWidth % dimX) == 0); SkASSERT((desc.fHeight % dimY) == 0); #endif desc.fConfig = fmt_to_config(fCompressedFormat); SkASSERT(fContext->getGpu()->caps()->isConfigTexturable(desc.fConfig)); } return fContext->refScratchTexture(desc, GrContext::kApprox_ScratchTexMatch); }