aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar senorblanco@chromium.org <senorblanco@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>2014-03-03 22:13:56 +0000
committerGravatar senorblanco@chromium.org <senorblanco@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>2014-03-03 22:13:56 +0000
commit6aa6fec0e332c9246958245bad5fc881fefee68f (patch)
treedb8597899a1452785f0a75cfb7a365eda96a452d /src
parent94e43ffae1877869b8ef85d429dd451020ecde89 (diff)
Cleanup patch to move all of SkImageFilterUtils into SkImageFilter.
This was a utility class that dates from before GPU code was allowed in core. Now that it is, there's no reason not to have this functionality in SkImageFilter. Covered by existing tests. R=reed@google.com Review URL: https://codereview.chromium.org/185973003 git-svn-id: http://skia.googlecode.com/svn/trunk@13646 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src')
-rw-r--r--src/core/SkImageFilter.cpp48
-rw-r--r--src/core/SkImageFilterUtils.cpp55
-rw-r--r--src/effects/SkArithmeticMode.cpp1
-rw-r--r--src/effects/SkBicubicImageFilter.cpp8
-rw-r--r--src/effects/SkBlurImageFilter.cpp8
-rw-r--r--src/effects/SkDisplacementMapEffect.cpp17
-rw-r--r--src/effects/SkMorphologyImageFilter.cpp8
-rw-r--r--src/effects/SkXfermodeImageFilter.cpp16
8 files changed, 72 insertions, 89 deletions
diff --git a/src/core/SkImageFilter.cpp b/src/core/SkImageFilter.cpp
index cd7c01b4e6..4a380c52eb 100644
--- a/src/core/SkImageFilter.cpp
+++ b/src/core/SkImageFilter.cpp
@@ -14,8 +14,8 @@
#include "SkValidationUtils.h"
#if SK_SUPPORT_GPU
#include "GrContext.h"
-#include "GrTexture.h"
-#include "SkImageFilterUtils.h"
+#include "SkGrPixelRef.h"
+#include "SkGr.h"
#endif
SkImageFilter::SkImageFilter(int inputCount, SkImageFilter** inputs, const CropRect* cropRect)
@@ -146,10 +146,11 @@ bool SkImageFilter::canFilterImageGPU() const {
bool SkImageFilter::filterImageGPU(Proxy* proxy, const SkBitmap& src, const SkMatrix& ctm,
SkBitmap* result, SkIPoint* offset) const {
#if SK_SUPPORT_GPU
- SkBitmap input;
+ SkBitmap input = src;
SkASSERT(fInputCount == 1);
SkIPoint srcOffset = SkIPoint::Make(0, 0);
- if (!SkImageFilterUtils::GetInputResultGPU(this->getInput(0), proxy, src, ctm, &input, &srcOffset)) {
+ if (this->getInput(0) &&
+ !this->getInput(0)->getInputResultGPU(proxy, src, ctm, &input, &srcOffset)) {
return false;
}
GrTexture* srcTexture = input.getTexture();
@@ -188,7 +189,7 @@ bool SkImageFilter::filterImageGPU(Proxy* proxy, const SkBitmap& src, const SkMa
context->drawRectToRect(paint, dstRect, srcRect);
SkAutoTUnref<GrTexture> resultTex(dst.detach());
- SkImageFilterUtils::WrapTexture(resultTex, bounds.width(), bounds.height(), result);
+ WrapTexture(resultTex, bounds.width(), bounds.height(), result);
return true;
#else
return false;
@@ -242,3 +243,40 @@ bool SkImageFilter::asNewEffect(GrEffectRef**, GrTexture*, const SkMatrix&, cons
bool SkImageFilter::asColorFilter(SkColorFilter**) const {
return false;
}
+
+#if SK_SUPPORT_GPU
+
+void SkImageFilter::WrapTexture(GrTexture* texture, int width, int height, SkBitmap* result) {
+ SkImageInfo info = SkImageInfo::MakeN32Premul(width, height);
+ result->setConfig(info);
+ result->setPixelRef(SkNEW_ARGS(SkGrPixelRef, (info, texture)))->unref();
+}
+
+bool SkImageFilter::getInputResultGPU(SkImageFilter::Proxy* proxy,
+ const SkBitmap& src, const SkMatrix& ctm,
+ SkBitmap* result, SkIPoint* offset) const {
+ // Ensure that GrContext calls under filterImage and filterImageGPU below will see an identity
+ // matrix with no clip and that the matrix, clip, and render target set before this function was
+ // called are restored before we return to the caller.
+ GrContext* context = src.getTexture()->getContext();
+ GrContext::AutoWideOpenIdentityDraw awoid(context, NULL);
+ if (this->canFilterImageGPU()) {
+ return this->filterImageGPU(proxy, src, ctm, result, offset);
+ } else {
+ if (this->filterImage(proxy, src, ctm, result, offset)) {
+ if (!result->getTexture()) {
+ SkImageInfo info;
+ if (!result->asImageInfo(&info)) {
+ return false;
+ }
+ GrTexture* resultTex = GrLockAndRefCachedBitmapTexture(context, *result, NULL);
+ result->setPixelRef(new SkGrPixelRef(info, resultTex))->unref();
+ GrUnlockAndUnrefCachedBitmapTexture(resultTex);
+ }
+ return true;
+ } else {
+ return false;
+ }
+ }
+}
+#endif
diff --git a/src/core/SkImageFilterUtils.cpp b/src/core/SkImageFilterUtils.cpp
deleted file mode 100644
index c6c534e71d..0000000000
--- a/src/core/SkImageFilterUtils.cpp
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * 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) {
- SkImageInfo info = SkImageInfo::MakeN32Premul(width, height);
- result->setConfig(info);
- result->setPixelRef(SkNEW_ARGS(SkGrPixelRef, (info, texture)))->unref();
- return true;
-}
-
-bool SkImageFilterUtils::GetInputResultGPU(const SkImageFilter* filter, SkImageFilter::Proxy* proxy,
- const SkBitmap& src, const SkMatrix& ctm,
- SkBitmap* result, SkIPoint* offset) {
- // Ensure that GrContext calls under filterImage and filterImageGPU below will see an identity
- // matrix with no clip and that the matrix, clip, and render target set before this function was
- // called are restored before we return to the caller.
- GrContext* context = src.getTexture()->getContext();
- GrContext::AutoWideOpenIdentityDraw awoid(context, NULL);
- if (!filter) {
- offset->fX = offset->fY = 0;
- *result = src;
- return true;
- } else if (filter->canFilterImageGPU()) {
- return filter->filterImageGPU(proxy, src, ctm, result, offset);
- } else {
- if (filter->filterImage(proxy, src, ctm, result, offset)) {
- if (!result->getTexture()) {
- SkImageInfo info;
- if (!result->asImageInfo(&info)) {
- return false;
- }
- GrTexture* resultTex = GrLockAndRefCachedBitmapTexture(context, *result, NULL);
- result->setPixelRef(new SkGrPixelRef(info, resultTex))->unref();
- GrUnlockAndUnrefCachedBitmapTexture(resultTex);
- }
- return true;
- } else {
- return false;
- }
- }
-}
-#endif
diff --git a/src/effects/SkArithmeticMode.cpp b/src/effects/SkArithmeticMode.cpp
index 2121e3a81d..9f43ed6c18 100644
--- a/src/effects/SkArithmeticMode.cpp
+++ b/src/effects/SkArithmeticMode.cpp
@@ -16,7 +16,6 @@
#include "GrCoordTransform.h"
#include "gl/GrGLEffect.h"
#include "GrTBackendEffectFactory.h"
-#include "SkImageFilterUtils.h"
#endif
static const bool gUseUnpremul = false;
diff --git a/src/effects/SkBicubicImageFilter.cpp b/src/effects/SkBicubicImageFilter.cpp
index 887e2b8eeb..acf48f04de 100644
--- a/src/effects/SkBicubicImageFilter.cpp
+++ b/src/effects/SkBicubicImageFilter.cpp
@@ -18,7 +18,6 @@
#include "effects/GrBicubicEffect.h"
#include "GrContext.h"
#include "GrTexture.h"
-#include "SkImageFilterUtils.h"
#endif
#define DS(x) SkDoubleToScalar(x)
@@ -171,8 +170,8 @@ bool SkBicubicImageFilter::onFilterImage(Proxy* proxy,
bool SkBicubicImageFilter::filterImageGPU(Proxy* proxy, const SkBitmap& src, const SkMatrix& ctm,
SkBitmap* result, SkIPoint* offset) const {
- SkBitmap srcBM;
- if (!SkImageFilterUtils::GetInputResultGPU(getInput(0), proxy, src, ctm, &srcBM, offset)) {
+ SkBitmap srcBM = src;
+ if (getInput(0) && !getInput(0)->getInputResultGPU(proxy, src, ctm, &srcBM, offset)) {
return false;
}
GrTexture* srcTexture = srcBM.getTexture();
@@ -198,7 +197,8 @@ bool SkBicubicImageFilter::filterImageGPU(Proxy* proxy, const SkBitmap& src, con
SkRect srcRect;
srcBM.getBounds(&srcRect);
context->drawRectToRect(paint, dstRect, srcRect);
- return SkImageFilterUtils::WrapTexture(dst, desc.fWidth, desc.fHeight, result);
+ WrapTexture(dst, desc.fWidth, desc.fHeight, result);
+ return true;
}
#endif
diff --git a/src/effects/SkBlurImageFilter.cpp b/src/effects/SkBlurImageFilter.cpp
index 4d23658fb6..c5e3a78fbb 100644
--- a/src/effects/SkBlurImageFilter.cpp
+++ b/src/effects/SkBlurImageFilter.cpp
@@ -14,7 +14,6 @@
#include "SkBlurImage_opts.h"
#if SK_SUPPORT_GPU
#include "GrContext.h"
-#include "SkImageFilterUtils.h"
#endif
SkBlurImageFilter::SkBlurImageFilter(SkReadBuffer& buffer)
@@ -254,9 +253,9 @@ bool SkBlurImageFilter::onFilterBounds(const SkIRect& src, const SkMatrix& ctm,
bool SkBlurImageFilter::filterImageGPU(Proxy* proxy, const SkBitmap& src, const SkMatrix& ctm,
SkBitmap* result, SkIPoint* offset) const {
#if SK_SUPPORT_GPU
- SkBitmap input;
+ SkBitmap input = src;
SkIPoint srcOffset = SkIPoint::Make(0, 0);
- if (!SkImageFilterUtils::GetInputResultGPU(getInput(0), proxy, src, ctm, &input, &srcOffset)) {
+ if (getInput(0) && !getInput(0)->getInputResultGPU(proxy, src, ctm, &input, &srcOffset)) {
return false;
}
GrTexture* source = input.getTexture();
@@ -278,7 +277,8 @@ bool SkBlurImageFilter::filterImageGPU(Proxy* proxy, const SkBitmap& src, const
true,
sigma.x(),
sigma.y()));
- return SkImageFilterUtils::WrapTexture(tex, rect.width(), rect.height(), result);
+ WrapTexture(tex, rect.width(), rect.height(), result);
+ return true;
#else
SkDEBUGFAIL("Should not call in GPU-less build");
return false;
diff --git a/src/effects/SkDisplacementMapEffect.cpp b/src/effects/SkDisplacementMapEffect.cpp
index cffadb2e66..62fba1ac48 100644
--- a/src/effects/SkDisplacementMapEffect.cpp
+++ b/src/effects/SkDisplacementMapEffect.cpp
@@ -15,7 +15,6 @@
#include "GrCoordTransform.h"
#include "gl/GrGLEffect.h"
#include "GrTBackendEffectFactory.h"
-#include "SkImageFilterUtils.h"
#endif
namespace {
@@ -349,17 +348,18 @@ private:
bool SkDisplacementMapEffect::filterImageGPU(Proxy* proxy, const SkBitmap& src, const SkMatrix& ctm,
SkBitmap* result, SkIPoint* offset) const {
- SkBitmap colorBM;
+ SkBitmap colorBM = src;
SkIPoint colorOffset = SkIPoint::Make(0, 0);
- if (!SkImageFilterUtils::GetInputResultGPU(getColorInput(), proxy, src, ctm, &colorBM,
- &colorOffset)) {
+ if (getColorInput() && !getColorInput()->getInputResultGPU(proxy, src, ctm, &colorBM,
+ &colorOffset)) {
return false;
}
GrTexture* color = colorBM.getTexture();
- SkBitmap displacementBM;
+ SkBitmap displacementBM = src;
SkIPoint displacementOffset = SkIPoint::Make(0, 0);
- if (!SkImageFilterUtils::GetInputResultGPU(getDisplacementInput(), proxy, src, ctm,
- &displacementBM, &displacementOffset)) {
+ if (getDisplacementInput() &&
+ !getDisplacementInput()->getInputResultGPU(proxy, src, ctm, &displacementBM,
+ &displacementOffset)) {
return false;
}
GrTexture* displacement = displacementBM.getTexture();
@@ -415,7 +415,8 @@ bool SkDisplacementMapEffect::filterImageGPU(Proxy* proxy, const SkBitmap& src,
context->drawRect(paint, SkRect::Make(colorBounds));
offset->fX = bounds.left();
offset->fY = bounds.top();
- return SkImageFilterUtils::WrapTexture(dst, bounds.width(), bounds.height(), result);
+ WrapTexture(dst, bounds.width(), bounds.height(), result);
+ return true;
}
///////////////////////////////////////////////////////////////////////////////
diff --git a/src/effects/SkMorphologyImageFilter.cpp b/src/effects/SkMorphologyImageFilter.cpp
index 351042bd83..a8f9da4f47 100644
--- a/src/effects/SkMorphologyImageFilter.cpp
+++ b/src/effects/SkMorphologyImageFilter.cpp
@@ -18,7 +18,6 @@
#include "GrTBackendEffectFactory.h"
#include "gl/GrGLEffect.h"
#include "effects/Gr1DKernelEffect.h"
-#include "SkImageFilterUtils.h"
#endif
SkMorphologyImageFilter::SkMorphologyImageFilter(SkReadBuffer& buffer)
@@ -530,7 +529,8 @@ bool apply_morphology(const SkBitmap& input,
morphType, Gr1DKernelEffect::kY_Direction);
src.reset(ast.detach());
}
- return SkImageFilterUtils::WrapTexture(src, rect.width(), rect.height(), dst);
+ SkImageFilter::WrapTexture(src, rect.width(), rect.height(), dst);
+ return true;
}
};
@@ -541,9 +541,9 @@ bool SkMorphologyImageFilter::filterImageGPUGeneric(bool dilate,
const SkMatrix& ctm,
SkBitmap* result,
SkIPoint* offset) const {
- SkBitmap input;
+ SkBitmap input = src;
SkIPoint srcOffset = SkIPoint::Make(0, 0);
- if (!SkImageFilterUtils::GetInputResultGPU(getInput(0), proxy, src, ctm, &input, &srcOffset)) {
+ if (getInput(0) && !getInput(0)->getInputResultGPU(proxy, src, ctm, &input, &srcOffset)) {
return false;
}
SkIRect bounds;
diff --git a/src/effects/SkXfermodeImageFilter.cpp b/src/effects/SkXfermodeImageFilter.cpp
index d43699db64..cdc026a654 100644
--- a/src/effects/SkXfermodeImageFilter.cpp
+++ b/src/effects/SkXfermodeImageFilter.cpp
@@ -16,7 +16,6 @@
#include "GrContext.h"
#include "effects/GrSimpleTextureEffect.h"
#include "SkGr.h"
-#include "SkImageFilterUtils.h"
#endif
///////////////////////////////////////////////////////////////////////////////
@@ -101,17 +100,17 @@ bool SkXfermodeImageFilter::filterImageGPU(Proxy* proxy,
const SkMatrix& ctm,
SkBitmap* result,
SkIPoint* offset) const {
- SkBitmap background;
+ SkBitmap background = src;
SkIPoint backgroundOffset = SkIPoint::Make(0, 0);
- if (!SkImageFilterUtils::GetInputResultGPU(getInput(0), proxy, src, ctm, &background,
- &backgroundOffset)) {
+ if (getInput(0) && !getInput(0)->getInputResultGPU(proxy, src, ctm, &background,
+ &backgroundOffset)) {
return false;
}
GrTexture* backgroundTex = background.getTexture();
- SkBitmap foreground;
+ SkBitmap foreground = src;
SkIPoint foregroundOffset = SkIPoint::Make(0, 0);
- if (!SkImageFilterUtils::GetInputResultGPU(getInput(1), proxy, src, ctm, &foreground,
- &foregroundOffset)) {
+ if (getInput(1) && !getInput(1)->getInputResultGPU(proxy, src, ctm, &foreground,
+ &foregroundOffset)) {
return false;
}
GrTexture* foregroundTex = foreground.getTexture();
@@ -160,7 +159,8 @@ bool SkXfermodeImageFilter::filterImageGPU(Proxy* proxy,
}
offset->fX = backgroundOffset.fX;
offset->fY = backgroundOffset.fY;
- return SkImageFilterUtils::WrapTexture(dst, src.width(), src.height(), result);
+ WrapTexture(dst, src.width(), src.height(), result);
+ return true;
}
#endif