diff options
author | junov@chromium.org <junov@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2013-01-14 16:27:50 +0000 |
---|---|---|
committer | junov@chromium.org <junov@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2013-01-14 16:27:50 +0000 |
commit | ff06af20fde68aa737b540dc6e42924532873b22 (patch) | |
tree | 02afcad355d5079c129e234b0480c60e022c3b6e | |
parent | 47ebbcc7abf90c943b2d5e05fcedb42913e917e0 (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.cpp | 18 | ||||
-rw-r--r-- | gm/gm.h | 11 | ||||
-rw-r--r-- | gm/gmmain.cpp | 2 | ||||
-rw-r--r-- | gm/imagefiltersbase.cpp | 8 | ||||
-rw-r--r-- | gm/lighting.cpp | 20 | ||||
-rw-r--r-- | gm/matrixconvolution.cpp | 6 |
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: @@ -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) { |