Home | History | Annotate | Download | only in core
      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