1 /* 2 * Copyright 2013 The Android Open Source Project 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #include "SkMatrix.h" 9 10 #if SK_SUPPORT_GPU 11 #include "GrTexture.h" 12 #include "SkImageFilterUtils.h" 13 #include "SkBitmap.h" 14 #include "SkGrPixelRef.h" 15 #include "SkGr.h" 16 17 bool SkImageFilterUtils::WrapTexture(GrTexture* texture, int width, int height, SkBitmap* result) { 18 result->setConfig(SkBitmap::kARGB_8888_Config, width, height); 19 result->setPixelRef(SkNEW_ARGS(SkGrPixelRef, (texture)))->unref(); 20 return true; 21 } 22 23 bool SkImageFilterUtils::GetInputResultGPU(SkImageFilter* filter, SkImageFilter::Proxy* proxy, 24 const SkBitmap& src, const SkMatrix& ctm, 25 SkBitmap* result, SkIPoint* offset) { 26 if (!filter) { 27 *result = src; 28 return true; 29 } else if (filter->canFilterImageGPU()) { 30 return filter->filterImageGPU(proxy, src, ctm, result, offset); 31 } else { 32 if (filter->filterImage(proxy, src, ctm, result, offset)) { 33 if (!result->getTexture()) { 34 GrContext* context = ((GrTexture *) src.getTexture())->getContext(); 35 GrTexture* resultTex = GrLockAndRefCachedBitmapTexture(context, 36 *result, NULL); 37 result->setPixelRef(new SkGrPixelRef(resultTex))->unref(); 38 GrUnlockAndUnrefCachedBitmapTexture(resultTex); 39 } 40 return true; 41 } else { 42 return false; 43 } 44 } 45 } 46 #endif 47