/* * Copyright 2013 The Android Open Source Project * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #include "SkMatrix.h" #if SK_SUPPORT_GPU #include "GrTexture.h" #include "SkImageFilterUtils.h" #include "SkBitmap.h" #include "SkGrPixelRef.h" #include "SkGr.h" bool SkImageFilterUtils::WrapTexture(GrTexture* texture, int width, int height, SkBitmap* result) { result->setConfig(SkBitmap::kARGB_8888_Config, width, height); result->setPixelRef(SkNEW_ARGS(SkGrPixelRef, (texture)))->unref(); return true; } bool SkImageFilterUtils::GetInputResultGPU(SkImageFilter* filter, SkImageFilter::Proxy* proxy, const SkBitmap& src, SkBitmap* result) { if (!filter) { *result = src; return true; } else if (filter->canFilterImageGPU()) { return filter->filterImageGPU(proxy, src, result); } else { SkIPoint offset; if (filter->filterImage(proxy, src, SkMatrix(), result, &offset)) { if (!result->getTexture()) { GrContext* context = ((GrTexture *) src.getTexture())->getContext(); GrTexture* resultTex = GrLockAndRefCachedBitmapTexture(context, *result, NULL); result->setPixelRef(new SkGrPixelRef(resultTex))->unref(); GrUnlockAndUnrefCachedBitmapTexture(resultTex); } return true; } else { return false; } } } #endif