1fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/* 2fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Copyright 2016 Google Inc. 3fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * 4fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Use of this source code is governed by a BSD-style license that can be 5fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * found in the LICENSE file. 6fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */ 7fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 8fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "GrImageTextureMaker.h" 9fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "GrContext.h" 11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "GrGpuResourcePriv.h" 12fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkGr.h" 13fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkImage_Base.h" 14fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkImageCacherator.h" 15fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkPixelRef.h" 16fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 17fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotGrImageTextureMaker::GrImageTextureMaker(GrContext* context, const SkImage* client, 18fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkImage::CachingHint chint) 19fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot : INHERITED(context, client->width(), client->height(), client->isAlphaOnly()) 20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot , fCacher(as_IB(client)->peekCacherator()) 21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot , fClient(client) 22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot , fCachingHint(chint) { 23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkASSERT(fCacher); 24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot GrMakeKeyFromImageID(&fOriginalKey, client->uniqueID(), 25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkIRect::MakeWH(this->width(), this->height())); 26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot} 27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotsk_sp<GrTextureProxy> GrImageTextureMaker::refOriginalTextureProxy(bool willBeMipped, 29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkColorSpace* dstColorSpace, 30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot AllowedTexGenType onlyIfFast) { 31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return fCacher->lockTextureProxy(this->context(), fOriginalKey, fCachingHint, 32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot willBeMipped, dstColorSpace, onlyIfFast); 33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot} 34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 35fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotvoid GrImageTextureMaker::makeCopyKey(const CopyParams& stretch, GrUniqueKey* paramsCopyKey, 36fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkColorSpace* dstColorSpace) { 37fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot if (fOriginalKey.isValid() && SkImage::kAllow_CachingHint == fCachingHint) { 38fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkImageCacherator::CachedFormat cacheFormat = 39fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fCacher->chooseCacheFormat(dstColorSpace, this->context()->caps()); 40fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot GrUniqueKey cacheKey; 41fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fCacher->makeCacheKeyFromOrigKey(fOriginalKey, cacheFormat, &cacheKey); 42fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot MakeCopyKeyFromOrigKey(cacheKey, stretch, paramsCopyKey); 43fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 44fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot} 45fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 46fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotvoid GrImageTextureMaker::didCacheCopy(const GrUniqueKey& copyKey) { 47fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot as_IB(fClient)->notifyAddedToCache(); 48fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot} 49fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 50fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotSkAlphaType GrImageTextureMaker::alphaType() const { 51fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return fClient->alphaType(); 52fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot} 53fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotsk_sp<SkColorSpace> GrImageTextureMaker::getColorSpace(SkColorSpace* dstColorSpace) { 54fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return fCacher->getColorSpace(this->context(), dstColorSpace); 55fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot} 56