aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar junov@chromium.org <junov@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-01-14 16:27:50 +0000
committerGravatar junov@chromium.org <junov@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-01-14 16:27:50 +0000
commitff06af20fde68aa737b540dc6e42924532873b22 (patch)
tree02afcad355d5079c129e234b0480c60e022c3b6e
parent47ebbcc7abf90c943b2d5e05fcedb42913e917e0 (diff)
Changing imageFilter GM tests to use drawBitmap instead of drawSprite
The motivation is be able to test the filters with scaled SkPicture playback in isolation from the issues that surround usage of drawSprite Review URL: https://codereview.appspot.com/7060071 git-svn-id: http://skia.googlecode.com/svn/trunk@7152 2bbb7eff-a529-9590-31e7-b0007b416f81
-rw-r--r--gm/blend.cpp18
-rw-r--r--gm/gm.h11
-rw-r--r--gm/gmmain.cpp2
-rw-r--r--gm/imagefiltersbase.cpp8
-rw-r--r--gm/lighting.cpp20
-rw-r--r--gm/matrixconvolution.cpp6
6 files changed, 48 insertions, 17 deletions
diff --git a/gm/blend.cpp b/gm/blend.cpp
index 3ba92a7981..452eb4945c 100644
--- a/gm/blend.cpp
+++ b/gm/blend.cpp
@@ -63,6 +63,14 @@ protected:
return make_isize(500, 100);
}
+ void drawClippedBitmap(SkCanvas* canvas, const SkPaint& paint, int x) {
+ canvas->save();
+ canvas->clipRect(SkRect::MakeXYWH(SkIntToScalar(x), 0,
+ SkIntToScalar(fBitmap.width()), SkIntToScalar(fBitmap.height())));
+ canvas->drawBitmap(fBitmap, SkIntToScalar(x), 0, &paint);
+ canvas->restore();
+ }
+
virtual void onDraw(SkCanvas* canvas) {
if (!fInitialized) {
make_bitmap();
@@ -73,15 +81,15 @@ protected:
SkPaint paint;
SkAutoTUnref<SkImageFilter> background(SkNEW_ARGS(SkBitmapSource, (fCheckerboard)));
paint.setImageFilter(SkNEW_ARGS(SkBlendImageFilter, (SkBlendImageFilter::kNormal_Mode, background)))->unref();
- canvas->drawSprite(fBitmap, 0, 0, &paint);
+ drawClippedBitmap(canvas, paint, 0);
paint.setImageFilter(SkNEW_ARGS(SkBlendImageFilter, (SkBlendImageFilter::kMultiply_Mode, background)))->unref();
- canvas->drawSprite(fBitmap, 100, 0, &paint);
+ drawClippedBitmap(canvas, paint, 100);
paint.setImageFilter(SkNEW_ARGS(SkBlendImageFilter, (SkBlendImageFilter::kScreen_Mode, background)))->unref();
- canvas->drawSprite(fBitmap, 200, 0, &paint);
+ drawClippedBitmap(canvas, paint, 200);
paint.setImageFilter(SkNEW_ARGS(SkBlendImageFilter, (SkBlendImageFilter::kDarken_Mode, background)))->unref();
- canvas->drawSprite(fBitmap, 300, 0, &paint);
+ drawClippedBitmap(canvas, paint, 300);
paint.setImageFilter(SkNEW_ARGS(SkBlendImageFilter, (SkBlendImageFilter::kLighten_Mode, background)))->unref();
- canvas->drawSprite(fBitmap, 400, 0, &paint);
+ drawClippedBitmap(canvas, paint, 400);
}
private:
diff --git a/gm/gm.h b/gm/gm.h
index 9460ec01ab..0af928593f 100644
--- a/gm/gm.h
+++ b/gm/gm.h
@@ -34,11 +34,12 @@ namespace skiagm {
virtual ~GM();
enum Flags {
- kSkipPDF_Flag = 1 << 0,
- kSkipPicture_Flag = 1 << 1,
- kSkipPipe_Flag = 1 << 2,
- kSkipTiled_Flag = 1 << 3,
- kSkip565_Flag = 1 << 4,
+ kSkipPDF_Flag = 1 << 0,
+ kSkipPicture_Flag = 1 << 1,
+ kSkipPipe_Flag = 1 << 2,
+ kSkipTiled_Flag = 1 << 3,
+ kSkip565_Flag = 1 << 4,
+ kSkipScaledReplay_Flag = 1 << 5,
};
void draw(SkCanvas*);
diff --git a/gm/gmmain.cpp b/gm/gmmain.cpp
index 17563893d9..964bafa9ad 100644
--- a/gm/gmmain.cpp
+++ b/gm/gmmain.cpp
@@ -1402,6 +1402,8 @@ int tool_main(int argc, char** argv) {
if (!(gmFlags & GM::kSkipPicture_Flag) && doTileGrid) {
for(int scaleIndex = 0; scaleIndex < tileGridReplayScales.count(); ++scaleIndex) {
SkScalar replayScale = tileGridReplayScales[scaleIndex];
+ if ((gmFlags & GM::kSkipScaledReplay_Flag) && replayScale != 1)
+ continue;
// We record with the reciprocal scale to obtain a replay
// result that can be validated against comparisonBitmap.
SkScalar recordScale = SkScalarInvert(replayScale);
diff --git a/gm/imagefiltersbase.cpp b/gm/imagefiltersbase.cpp
index c7f043e724..e33c0eb272 100644
--- a/gm/imagefiltersbase.cpp
+++ b/gm/imagefiltersbase.cpp
@@ -165,6 +165,14 @@ protected:
canvas->drawRect(r, paint);
}
+ virtual uint32_t onGetFlags() const {
+ // Because of the use of drawSprite, this test is excluded
+ // from scaled replay tests because drawSprite ignores the
+ // reciprocal scale that is applied at record time, which is
+ // the intended behavior of drawSprite.
+ return kSkipScaledReplay_Flag;
+ }
+
virtual void onDraw(SkCanvas* canvas) {
void (*drawProc[])(SkCanvas*, const SkRect&, SkImageFilter*) = {
draw_paint,
diff --git a/gm/lighting.cpp b/gm/lighting.cpp
index 9db34fde3d..de5e3309c2 100644
--- a/gm/lighting.cpp
+++ b/gm/lighting.cpp
@@ -42,6 +42,14 @@ protected:
return make_isize(WIDTH, HEIGHT);
}
+ void drawClippedBitmap(SkCanvas* canvas, const SkPaint& paint, int x, int y) {
+ canvas->save();
+ canvas->clipRect(SkRect::MakeXYWH(SkIntToScalar(x), SkIntToScalar(y),
+ SkIntToScalar(fBitmap.width()), SkIntToScalar(fBitmap.height())));
+ canvas->drawBitmap(fBitmap, SkIntToScalar(x), SkIntToScalar(y), &paint);
+ canvas->restore();
+ }
+
virtual void onDraw(SkCanvas* canvas) {
if (!fInitialized) {
make_bitmap();
@@ -76,17 +84,17 @@ protected:
SkColor white(0xFFFFFFFF);
SkPaint paint;
paint.setImageFilter(SkLightingImageFilter::CreatePointLitDiffuse(pointLocation, white, surfaceScale, kd))->unref();
- canvas->drawSprite(fBitmap, 0, 0, &paint);
+ drawClippedBitmap(canvas, paint, 0, 0);
paint.setImageFilter(SkLightingImageFilter::CreateDistantLitDiffuse(distantDirection, white, surfaceScale, kd))->unref();
- canvas->drawSprite(fBitmap, 110, 0, &paint);
+ drawClippedBitmap(canvas, paint, 110, 0);
paint.setImageFilter(SkLightingImageFilter::CreateSpotLitDiffuse(spotLocation, spotTarget, spotExponent, cutoffAngle, white, surfaceScale, kd))->unref();
- canvas->drawSprite(fBitmap, 220, 0, &paint);
+ drawClippedBitmap(canvas, paint, 220, 0);
paint.setImageFilter(SkLightingImageFilter::CreatePointLitSpecular(pointLocation, white, surfaceScale, ks, shininess))->unref();
- canvas->drawSprite(fBitmap, 0, 110, &paint);
+ drawClippedBitmap(canvas, paint, 0, 110);
paint.setImageFilter(SkLightingImageFilter::CreateDistantLitSpecular(distantDirection, white, surfaceScale, ks, shininess))->unref();
- canvas->drawSprite(fBitmap, 110, 110, &paint);
+ drawClippedBitmap(canvas, paint, 110, 110);
paint.setImageFilter(SkLightingImageFilter::CreateSpotLitSpecular(spotLocation, spotTarget, spotExponent, cutoffAngle, white, surfaceScale, ks, shininess))->unref();
- canvas->drawSprite(fBitmap, 220, 110, &paint);
+ drawClippedBitmap(canvas, paint, 220, 110);
}
private:
diff --git a/gm/matrixconvolution.cpp b/gm/matrixconvolution.cpp
index 6bb7d99cba..59bd38008b 100644
--- a/gm/matrixconvolution.cpp
+++ b/gm/matrixconvolution.cpp
@@ -58,7 +58,11 @@ protected:
SkPaint paint;
SkAutoTUnref<SkImageFilter> filter(SkNEW_ARGS(SkMatrixConvolutionImageFilter, (kernelSize, kernel, gain, bias, target, tileMode, convolveAlpha)));
paint.setImageFilter(filter);
- canvas->drawSprite(fBitmap, x, y, &paint);
+ canvas->save();
+ canvas->clipRect(SkRect::MakeXYWH(SkIntToScalar(x), SkIntToScalar(y),
+ SkIntToScalar(fBitmap.width()), SkIntToScalar(fBitmap.height())));
+ canvas->drawBitmap(fBitmap, SkIntToScalar(x), SkIntToScalar(y), &paint);
+ canvas->restore();
}
virtual void onDraw(SkCanvas* canvas) {