| Index: src/core/SkMaskFilter.cpp
|
| ===================================================================
|
| --- src/core/SkMaskFilter.cpp (revision 9864)
|
| +++ src/core/SkMaskFilter.cpp (working copy)
|
| @@ -11,7 +11,11 @@
|
| #include "SkBlitter.h"
|
| #include "SkBounder.h"
|
| #include "SkDraw.h"
|
| +#include "SkGr.h"
|
| +#include "SkGrPixelRef.h"
|
| #include "SkRasterClip.h"
|
| +#include "SkTypes.h"
|
| +#include "GrTexture.h"
|
|
|
|
|
| SK_DEFINE_INST_COUNT(SkMaskFilter)
|
| @@ -266,10 +270,60 @@
|
| return kUnimplemented_FilterReturn;
|
| }
|
|
|
| -SkMaskFilter::BlurType SkMaskFilter::asABlur(BlurInfo*) const {
|
| - return kNone_BlurType;
|
| +bool SkMaskFilter::asNewEffect(GrEffectRef** effect, GrTexture*) const {
|
| + return false;
|
| }
|
|
|
| +bool SkMaskFilter::canFilterMaskGPU(const SkRect& devBounds,
|
| + const SkIRect& clipBounds,
|
| + const SkMatrix& ctm,
|
| + SkRect* maskRect) const {
|
| + return false;
|
| +}
|
| +
|
| +bool SkMaskFilter::filterMaskGPU(GrContext* context,
|
| + const SkBitmap& srcBM,
|
| + const SkRect& maskRect,
|
| + SkBitmap* resultBM) const {
|
| + SkAutoTUnref<GrTexture> src;
|
| + if (NULL == srcBM.getTexture()) {
|
| + GrTextureDesc desc;
|
| + desc.fConfig = SkBitmapConfig2GrPixelConfig(srcBM.config());
|
| + desc.fWidth = srcBM.width();
|
| + desc.fHeight = srcBM.height();
|
| +
|
| + SkAutoLockPixels alp(srcBM);
|
| +
|
| + src.reset(context->createUncachedTexture(desc,
|
| + srcBM.getPixels(),
|
| + srcBM.rowBytes()));
|
| + if (NULL == src.get()) {
|
| + return false;
|
| + }
|
| + } else {
|
| + src.reset((GrTexture*) srcBM.getTexture());
|
| + src.get()->ref();
|
| + }
|
| + GrTexture* dst;
|
| +
|
| + bool result = this->filterMaskGPU(src, maskRect, &dst, false);
|
| + if (!result) {
|
| + return false;
|
| + }
|
| +
|
| + resultBM->setConfig(srcBM.config(), dst->width(), dst->height());
|
| + resultBM->setPixelRef(SkNEW_ARGS(SkGrPixelRef, (dst)))->unref();
|
| + dst->unref();
|
| + return true;
|
| +}
|
| +
|
| +bool SkMaskFilter::filterMaskGPU(GrTexture* src,
|
| + const SkRect& maskRect,
|
| + GrTexture** result,
|
| + bool canOverwriteSrc) const {
|
| + return false;
|
| +}
|
| +
|
| void SkMaskFilter::computeFastBounds(const SkRect& src, SkRect* dst) const {
|
| SkMask srcM, dstM;
|
|
|
|
|