Accept displacement with no displacement input
BUG=
R=senorblanco@google.com, senorblanco@chromium.org, sugoi@google.com, bsalomon@google.com, bsalomon@chromium.org
Author: sugoi@chromium.org
Review URL: https://codereview.chromium.org/104853005
git-svn-id: http://skia.googlecode.com/svn/trunk@12773 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/expectations/gm/ignored-tests.txt b/expectations/gm/ignored-tests.txt
index 2872e7e..b8a9019 100644
--- a/expectations/gm/ignored-tests.txt
+++ b/expectations/gm/ignored-tests.txt
@@ -66,3 +66,6 @@
clipped-bitmap-shaders-clamp-hq_angle
clipped-bitmap-shaders-mirror-hq_angle
clipped-bitmap-shaders-tile-hq_angle
+
+# Added by sugoi for added test in https://codereview.chromium.org/104853005
+displacement
diff --git a/gm/displacement.cpp b/gm/displacement.cpp
index 5a20f81..cc66401 100644
--- a/gm/displacement.cpp
+++ b/gm/displacement.cpp
@@ -183,6 +183,7 @@
40.0f, displ, NULL, &cropRect)))->unref();
drawClippedBitmap(canvas, 400, 300, paint);
+ // Tests for images of different sizes
displ.reset(SkNEW_ARGS(SkBitmapSource, (fSmall)));
paint.setImageFilter(SkNEW_ARGS(SkDisplacementMapEffect,
(SkDisplacementMapEffect::kR_ChannelSelectorType,
@@ -207,6 +208,15 @@
SkDisplacementMapEffect::kA_ChannelSelectorType,
40.0f, displ)))->unref();
drawClippedBitmap(canvas, 300, 400, paint);
+
+ // Test for no given displacement input. In this case, both displacement
+ // and color should use the same bitmap, given to SkCanvas::drawBitmap()
+ // as an input argument.
+ paint.setImageFilter(SkNEW_ARGS(SkDisplacementMapEffect,
+ (SkDisplacementMapEffect::kG_ChannelSelectorType,
+ SkDisplacementMapEffect::kA_ChannelSelectorType,
+ 40.0f, NULL)))->unref();
+ drawClippedBitmap(canvas, 400, 400, paint);
}
private:
diff --git a/src/effects/SkDisplacementMapEffect.cpp b/src/effects/SkDisplacementMapEffect.cpp
index 8fc4c86..3087b63 100644
--- a/src/effects/SkDisplacementMapEffect.cpp
+++ b/src/effects/SkDisplacementMapEffect.cpp
@@ -183,12 +183,11 @@
const SkMatrix& ctm,
SkBitmap* dst,
SkIPoint* offset) {
- SkBitmap displ, color = src;
+ SkBitmap displ = src, color = src;
SkImageFilter* colorInput = getColorInput();
SkImageFilter* displacementInput = getDisplacementInput();
- SkASSERT(NULL != displacementInput);
if ((colorInput && !colorInput->filterImage(proxy, src, ctm, &color, offset)) ||
- !displacementInput || !displacementInput->filterImage(proxy, src, ctm, &displ, offset)) {
+ (displacementInput && !displacementInput->filterImage(proxy, src, ctm, &displ, offset))) {
return false;
}
if ((displ.config() != SkBitmap::kARGB_8888_Config) ||