OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2013 Google Inc. | 2 * Copyright 2013 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #include "gm.h" | 8 #include "gm.h" |
9 #include "SkPerlinNoiseShader.h" | 9 #include "SkPerlinNoiseShader.h" |
10 | 10 |
11 class PerlinNoiseGM : public skiagm::GM { | 11 class PerlinNoiseGM : public skiagm::GM { |
12 public: | 12 public: |
13 PerlinNoiseGM() { | 13 PerlinNoiseGM() { |
14 this->setBGColor(0xFF000000); | 14 this->setBGColor(0xFF000000); |
15 fSize = SkISize::Make(80, 80); | 15 fSize = SkISize::Make(80, 80); |
16 } | 16 } |
17 | 17 |
18 protected: | 18 protected: |
19 virtual SkString onShortName() { | 19 virtual SkString onShortName() { |
20 return SkString("perlinnoise"); | 20 return SkString("perlinnoise"); |
21 } | 21 } |
22 | 22 |
23 virtual SkISize onISize() { | 23 virtual SkISize onISize() { |
24 return SkISize::Make(200, 500); | 24 return SkISize::Make(200, 500); |
25 } | 25 } |
26 | 26 |
27 void drawClippedRect(SkCanvas* canvas, int x, int y, const SkPaint& paint) { | 27 void drawRect(SkCanvas* canvas, int x, int y, const SkPaint& paint, const Sk
ISize& size) { |
28 canvas->save(); | 28 canvas->save(); |
29 canvas->clipRect(SkRect::MakeXYWH(SkIntToScalar(x), SkIntToScalar(y), | 29 canvas->translate(SkIntToScalar(x), SkIntToScalar(y)); |
30 SkIntToScalar(fSize.width()), SkIntToScalar(fSize.heigh
t()))); | 30 SkRect r = SkRect::MakeWH(SkIntToScalar(size.width()), |
31 SkRect r = SkRect::MakeXYWH(SkIntToScalar(x), SkIntToScalar(y), | 31 SkIntToScalar(size.height())); |
32 SkIntToScalar(fSize.width()), | |
33 SkIntToScalar(fSize.height())); | |
34 canvas->drawRect(r, paint); | 32 canvas->drawRect(r, paint); |
35 canvas->restore(); | 33 canvas->restore(); |
36 } | 34 } |
37 | 35 |
38 void test(SkCanvas* canvas, int x, int y, SkPerlinNoiseShader::Type type, | 36 void test(SkCanvas* canvas, int x, int y, SkPerlinNoiseShader::Type type, |
39 float baseFrequencyX, float baseFrequencyY, int numOctaves, float
seed, | 37 float baseFrequencyX, float baseFrequencyY, int numOctaves, float
seed, |
40 bool stitchTiles) { | 38 bool stitchTiles) { |
| 39 SkISize tileSize = SkISize::Make(fSize.width() / 2, fSize.height() / 2); |
41 SkShader* shader = (type == SkPerlinNoiseShader::kFractalNoise_Type) ? | 40 SkShader* shader = (type == SkPerlinNoiseShader::kFractalNoise_Type) ? |
42 SkPerlinNoiseShader::CreateFractalNoise(baseFrequencyX, baseFrequenc
yY, numOctaves, | 41 SkPerlinNoiseShader::CreateFractalNoise(baseFrequencyX, baseFrequenc
yY, numOctaves, |
43 seed, stitchTiles ? &fSize :
NULL) : | 42 seed, stitchTiles ? &tileSize
: NULL) : |
44 SkPerlinNoiseShader::CreateTurbulence(baseFrequencyX, baseFrequencyY
, numOctaves, | 43 SkPerlinNoiseShader::CreateTurbulence(baseFrequencyX, baseFrequencyY
, numOctaves, |
45 seed, stitchTiles ? &fSize : NUL
L); | 44 seed, stitchTiles ? &tileSize :
NULL); |
46 SkPaint paint; | 45 SkPaint paint; |
47 paint.setShader(shader)->unref(); | 46 paint.setShader(shader)->unref(); |
48 drawClippedRect(canvas, x, y, paint); | 47 if (stitchTiles) { |
| 48 drawRect(canvas, x, y, paint, tileSize); |
| 49 x += tileSize.width(); |
| 50 drawRect(canvas, x, y, paint, tileSize); |
| 51 y += tileSize.width(); |
| 52 drawRect(canvas, x, y, paint, tileSize); |
| 53 x -= tileSize.width(); |
| 54 drawRect(canvas, x, y, paint, tileSize); |
| 55 } else { |
| 56 drawRect(canvas, x, y, paint, fSize); |
| 57 } |
49 } | 58 } |
50 | 59 |
51 virtual void onDraw(SkCanvas* canvas) { | 60 virtual void onDraw(SkCanvas* canvas) { |
52 canvas->clear(0x00000000); | 61 canvas->clear(0x00000000); |
53 test(canvas, 0, 0, SkPerlinNoiseShader::kFractalNoise_Type, | 62 test(canvas, 0, 0, SkPerlinNoiseShader::kFractalNoise_Type, |
54 0.1f, 0.1f, 0, 0, false); | 63 0.1f, 0.1f, 0, 0, false); |
55 test(canvas, 100, 0, SkPerlinNoiseShader::kTurbulence_Type, | 64 test(canvas, 100, 0, SkPerlinNoiseShader::kTurbulence_Type, |
56 0.1f, 0.1f, 0, 0, false); | 65 0.1f, 0.1f, 0, 0, false); |
57 | 66 |
58 test(canvas, 0, 100, SkPerlinNoiseShader::kFractalNoise_Type, | 67 test(canvas, 0, 100, SkPerlinNoiseShader::kFractalNoise_Type, |
59 0.1f, 0.1f, 2, 0, false); | 68 0.1f, 0.1f, 2, 0, false); |
60 test(canvas, 100, 100, SkPerlinNoiseShader::kFractalNoise_Type, | 69 test(canvas, 100, 100, SkPerlinNoiseShader::kFractalNoise_Type, |
61 0.2f, 0.4f, 5, 0, true); | 70 0.05f, 0.1f, 1, 0, true); |
62 | 71 |
63 test(canvas, 0, 200, SkPerlinNoiseShader::kTurbulence_Type, | 72 test(canvas, 0, 200, SkPerlinNoiseShader::kTurbulence_Type, |
64 0.1f, 0.1f, 2, 0, true); | 73 0.1f, 0.1f, 1, 0, true); |
65 test(canvas, 100, 200, SkPerlinNoiseShader::kTurbulence_Type, | 74 test(canvas, 100, 200, SkPerlinNoiseShader::kTurbulence_Type, |
66 0.2f, 0.4f, 5, 0, false); | 75 0.2f, 0.4f, 5, 0, false); |
67 | 76 |
68 test(canvas, 0, 300, SkPerlinNoiseShader::kFractalNoise_Type, | 77 test(canvas, 0, 300, SkPerlinNoiseShader::kFractalNoise_Type, |
69 0.1f, 0.1f, 3, 1, false); | 78 0.1f, 0.1f, 3, 1, false); |
70 test(canvas, 100, 300, SkPerlinNoiseShader::kFractalNoise_Type, | 79 test(canvas, 100, 300, SkPerlinNoiseShader::kFractalNoise_Type, |
71 0.1f, 0.1f, 3, 4, false); | 80 0.1f, 0.1f, 3, 4, false); |
72 | 81 |
73 canvas->scale(0.75f, 1.0f); | 82 canvas->scale(0.75f, 1.0f); |
74 | 83 |
75 test(canvas, 0, 400, SkPerlinNoiseShader::kFractalNoise_Type, | 84 test(canvas, 0, 400, SkPerlinNoiseShader::kFractalNoise_Type, |
76 0.1f, 0.1f, 2, 0, false); | 85 0.1f, 0.1f, 2, 0, false); |
77 test(canvas, 100, 400, SkPerlinNoiseShader::kFractalNoise_Type, | 86 test(canvas, 100, 400, SkPerlinNoiseShader::kFractalNoise_Type, |
78 0.2f, 0.4f, 5, 0, true); | 87 0.1f, 0.05f, 1, 0, true); |
79 } | 88 } |
80 | 89 |
81 private: | 90 private: |
82 typedef GM INHERITED; | 91 typedef GM INHERITED; |
83 SkISize fSize; | 92 SkISize fSize; |
84 }; | 93 }; |
85 | 94 |
86 class PerlinNoiseGM2 : public skiagm::GM { | 95 class PerlinNoiseGM2 : public skiagm::GM { |
87 public: | 96 public: |
88 PerlinNoiseGM2() { | 97 PerlinNoiseGM2() { |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
162 | 171 |
163 private: | 172 private: |
164 typedef GM INHERITED; | 173 typedef GM INHERITED; |
165 SkISize fSize; | 174 SkISize fSize; |
166 }; | 175 }; |
167 | 176 |
168 ////////////////////////////////////////////////////////////////////////////// | 177 ////////////////////////////////////////////////////////////////////////////// |
169 | 178 |
170 DEF_GM( return new PerlinNoiseGM; ) | 179 DEF_GM( return new PerlinNoiseGM; ) |
171 DEF_GM( return new PerlinNoiseGM2; ) | 180 DEF_GM( return new PerlinNoiseGM2; ) |
OLD | NEW |