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

Side by Side Diff: gm/samplerstress.cpp

Issue 468483002: re-add samplerstress gm, but use blurmaskfilter instead (std filter) (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 6 years, 4 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 | gyp/gmslides.gypi » ('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 2012 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 "SkCanvas.h"
10 #include "SkShader.h"
11 #include "SkBlurMaskFilter.h"
12
13 namespace skiagm {
14
15 /**
16 * Stress test the GPU samplers by rendering a textured glyph with a mask and
17 * an AA clip
18 */
19 class SamplerStressGM : public GM {
20 public:
21 SamplerStressGM()
22 : fTextureCreated(false)
23 , fShader(NULL)
24 , fMaskFilter(NULL) {
25 }
26
27 virtual ~SamplerStressGM() {
28 }
29
30 protected:
31 virtual uint32_t onGetFlags() const SK_OVERRIDE {
32 return kSkipTiled_Flag;
33 }
34
35 virtual SkString onShortName() {
36 return SkString("gpusamplerstress");
37 }
38
39 virtual SkISize onISize() {
40 return SkISize::Make(640, 480);
41 }
42
43 /**
44 * Create a red & green stripes on black texture
45 */
46 void createTexture() {
47 if (fTextureCreated) {
48 return;
49 }
50
51 static const int xSize = 16;
52 static const int ySize = 16;
53
54 fTexture.allocN32Pixels(xSize, ySize);
55 SkPMColor* addr = fTexture.getAddr32(0, 0);
56
57 for (int y = 0; y < ySize; ++y) {
58 for (int x = 0; x < xSize; ++x) {
59 addr[y*xSize+x] = SkPreMultiplyColor(SK_ColorBLACK);
60
61 if ((y % 5) == 0) {
62 addr[y*xSize+x] = SkPreMultiplyColor(SK_ColorRED);
63 }
64 if ((x % 7) == 0) {
65 addr[y*xSize+x] = SkPreMultiplyColor(SK_ColorGREEN);
66 }
67 }
68 }
69
70 fTextureCreated = true;
71 }
72
73 void createShader() {
74 if (NULL != fShader.get()) {
75 return;
76 }
77
78 createTexture();
79
80 fShader.reset(SkShader::CreateBitmapShader(fTexture,
81 SkShader::kRepeat_TileMode,
82 SkShader::kRepeat_TileMode));
83 }
84
85 void createMaskFilter() {
86 if (NULL != fMaskFilter.get()) {
87 return;
88 }
89
90 const SkScalar sigma = 1;
91 fMaskFilter.reset(SkBlurMaskFilter::Create(kNormal_SkBlurStyle, sigma));
92 }
93
94 virtual void onDraw(SkCanvas* canvas) {
95
96 createShader();
97 createMaskFilter();
98
99 canvas->save();
100
101 // draw a letter "M" with a green & red striped texture and a
robertphillips 2014/08/12 13:52:46 blur
102 // stipple mask with a round rect soft clip
103 SkPaint paint;
104 paint.setAntiAlias(true);
105 paint.setTextSize(72);
106 paint.setShader(fShader.get());
107 paint.setMaskFilter(fMaskFilter.get());
108
109 SkRect temp;
110 temp.set(SkIntToScalar(115),
111 SkIntToScalar(75),
112 SkIntToScalar(144),
113 SkIntToScalar(110));
114
115 SkPath path;
116 path.addRoundRect(temp, SkIntToScalar(5), SkIntToScalar(5));
117
118 canvas->clipPath(path, SkRegion::kReplace_Op, true); // AA is on
119
120 canvas->drawText("M", 1,
121 SkIntToScalar(100), SkIntToScalar(100),
122 paint);
123
124 canvas->restore();
125
126 // Now draw stroked versions of the "M" and the round rect so we can
127 // see what is going on
128 SkPaint paint2;
129 paint2.setColor(SK_ColorBLACK);
130 paint2.setAntiAlias(true);
131 paint2.setTextSize(72);
132 paint2.setStyle(SkPaint::kStroke_Style);
133 paint2.setStrokeWidth(1);
134 canvas->drawText("M", 1,
135 SkIntToScalar(100), SkIntToScalar(100),
136 paint2);
137
138 paint2.setColor(SK_ColorGRAY);
139
140 canvas->drawPath(path, paint2);
141 }
142
143 private:
144 SkBitmap fTexture;
145 bool fTextureCreated;
146 SkAutoTUnref<SkShader> fShader;
147 SkAutoTUnref<SkMaskFilter> fMaskFilter;
148
149 typedef GM INHERITED;
150 };
151
152 //////////////////////////////////////////////////////////////////////////////
153
154 static GM* MyFactory(void*) { return new SamplerStressGM; }
155 static GMRegistry reg(MyFactory);
156
157 }
OLDNEW
« no previous file with comments | « no previous file | gyp/gmslides.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698