Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(98)

Side by Side Diff: gm/croppedrects.cpp

Issue 2140253004: Revert of Pre-crop filled rects to avoid scissor (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | include/gpu/GrClip.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 /*
2 * Copyright 2016 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8 #include "gm.h"
9 #include "SkPath.h"
10 #include "SkRandom.h"
11 #include "SkRRect.h"
12 #include "SkSurface.h"
13
14 namespace skiagm {
15
16 constexpr SkRect kSrcImageClip{75, 75, 275, 275};
17
18 /*
19 * The purpose of this test is to exercise all three codepaths in GrDrawContext (drawFilledRect,
20 * fillRectToRect, fillRectWithLocalMatrix) that pre-crop filled rects based on the clip.
21 *
22 * The test creates an image of a green square surrounded by red background, the n draws this image
23 * in various ways with the red clipped out. The test is successful if there is no visible red
24 * background, scissor is never used, and ideally, all the rectangles draw in on e batch.
25 */
26 class CroppedRectsGM : public GM {
27 private:
28 SkString onShortName() override final { return SkString("croppedrects"); }
29 SkISize onISize() override { return SkISize::Make(500, 500); }
30
31 void onOnceBeforeDraw() override {
32 sk_sp<SkSurface> srcSurface = SkSurface::MakeRasterN32Premul(500, 500);
33 SkCanvas* srcCanvas = srcSurface->getCanvas();
34
35 srcCanvas->clear(SK_ColorRED);
36
37 SkPaint paint;
38 paint.setColor(0xff00ff00);
39 srcCanvas->drawRect(kSrcImageClip, paint);
40
41 constexpr SkScalar kStrokeWidth = 10;
42 SkPaint stroke;
43 stroke.setStyle(SkPaint::kStroke_Style);
44 stroke.setStrokeWidth(kStrokeWidth);
45 stroke.setColor(0xff008800);
46 srcCanvas->drawRect(kSrcImageClip.makeInset(kStrokeWidth / 2, kStrokeWid th / 2), stroke);
47
48 fSrcImage = srcSurface->makeImageSnapshot(SkBudgeted::kYes, SkSurface::k No_ForceUnique);
49 fSrcImageShader = fSrcImage->makeShader(SkShader::kClamp_TileMode,
50 SkShader::kClamp_TileMode);
51 }
52
53 void onDraw(SkCanvas* canvas) override {
54 canvas->clear(SK_ColorWHITE);
55
56 {
57 // GrDrawContext::drawFilledRect.
58 SkAutoCanvasRestore acr(canvas, true);
59 SkPaint paint;
60 paint.setShader(fSrcImageShader);
61 paint.setFilterQuality(kNone_SkFilterQuality);
62 canvas->clipRect(kSrcImageClip);
63 canvas->drawPaint(paint);
64 }
65
66 {
67 // GrDrawContext::fillRectToRect.
68 SkAutoCanvasRestore acr(canvas, true);
69 SkPaint paint;
70 paint.setFilterQuality(kNone_SkFilterQuality);
71 SkRect drawRect = SkRect::MakeXYWH(350, 100, 100, 300);
72 canvas->clipRect(drawRect);
73 canvas->drawImageRect(fSrcImage.get(),
74 kSrcImageClip.makeOutset(0.5f * kSrcImageClip. width(),
75 kSrcImageClip.height( )),
76 drawRect.makeOutset(0.5f * drawRect.width(), d rawRect.height()),
77 &paint);
78 }
79
80 {
81 // GrDrawContext::fillRectWithLocalMatrix.
82 SkAutoCanvasRestore acr(canvas, true);
83 SkPath path;
84 path.moveTo(kSrcImageClip.fLeft - kSrcImageClip.width(), kSrcImageCl ip.centerY());
85 path.lineTo(kSrcImageClip.fRight + 3 * kSrcImageClip.width(), kSrcIm ageClip.centerY());
86 SkPaint paint;
87 paint.setStyle(SkPaint::kStroke_Style);
88 paint.setStrokeWidth(2 * kSrcImageClip.height());
89 paint.setShader(fSrcImageShader);
90 paint.setFilterQuality(kNone_SkFilterQuality);
91 canvas->translate(-90, 263);
92 canvas->scale(300 / kSrcImageClip.width(), 100 / kSrcImageClip.heigh t());
93 canvas->clipRect(kSrcImageClip);
94 canvas->drawPath(path, paint);
95 }
96
97 // TODO: assert the draw target only has one batch in the post-MDB world .
98 }
99
100 sk_sp<SkImage> fSrcImage;
101 sk_sp<SkShader> fSrcImageShader;
102
103 typedef GM INHERITED;
104 };
105
106 DEF_GM( return new CroppedRectsGM(); )
107
108 }
OLDNEW
« no previous file with comments | « no previous file | include/gpu/GrClip.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698