aboutsummaryrefslogtreecommitdiffhomepage
path: root/gm/perlinnoise.cpp
diff options
context:
space:
mode:
authorGravatar reed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2014-05-12 17:18:45 +0000
committerGravatar reed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2014-05-12 17:18:45 +0000
commita501a64827ca3d67d45441e42bc377207eb5041b (patch)
tree9b018c0aef92717a2c0852ff8c96780490e7d73f /gm/perlinnoise.cpp
parent261d0153e2ce1828355221f8dad0855eb6e6e243 (diff)
add new perlin noise gm to test localmatrix
BUG=skia: Review URL: https://codereview.chromium.org/283533002 git-svn-id: http://skia.googlecode.com/svn/trunk@14698 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'gm/perlinnoise.cpp')
-rw-r--r--gm/perlinnoise.cpp94
1 files changed, 86 insertions, 8 deletions
diff --git a/gm/perlinnoise.cpp b/gm/perlinnoise.cpp
index cce5b02627..1351ed7184 100644
--- a/gm/perlinnoise.cpp
+++ b/gm/perlinnoise.cpp
@@ -8,9 +8,7 @@
#include "gm.h"
#include "SkPerlinNoiseShader.h"
-namespace skiagm {
-
-class PerlinNoiseGM : public GM {
+class PerlinNoiseGM : public skiagm::GM {
public:
PerlinNoiseGM() {
this->setBGColor(0xFF000000);
@@ -23,7 +21,7 @@ protected:
}
virtual SkISize onISize() {
- return make_isize(200, 500);
+ return SkISize::Make(200, 500);
}
void drawClippedRect(SkCanvas* canvas, int x, int y, const SkPaint& paint) {
@@ -85,9 +83,89 @@ private:
SkISize fSize;
};
-//////////////////////////////////////////////////////////////////////////////
+class PerlinNoiseGM2 : public skiagm::GM {
+public:
+ PerlinNoiseGM2() {
+ fSize = SkISize::Make(80, 80);
+ }
+
+protected:
+ virtual SkString onShortName() {
+ return SkString("perlinnoise_localmatrix");
+ }
+
+ virtual SkISize onISize() {
+ return SkISize::Make(640, 480);
+ }
+
+ void install(SkPaint* paint, SkPerlinNoiseShader::Type type,
+ float baseFrequencyX, float baseFrequencyY, int numOctaves, float seed,
+ bool stitchTiles) {
+ SkShader* shader = (type == SkPerlinNoiseShader::kFractalNoise_Type) ?
+ SkPerlinNoiseShader::CreateFractalNoise(baseFrequencyX, baseFrequencyY, numOctaves,
+ seed, stitchTiles ? &fSize : NULL) :
+ SkPerlinNoiseShader::CreateTurbulence(baseFrequencyX, baseFrequencyY, numOctaves,
+ seed, stitchTiles ? &fSize : NULL);
+ paint->setShader(shader)->unref();
+ }
+
+ virtual void onDraw(SkCanvas* canvas) {
+ canvas->translate(10, 10);
+
+ SkPaint paint;
+ install(&paint, SkPerlinNoiseShader::kFractalNoise_Type, 0.1f, 0.1f, 2, 0, false);
+
+ const SkScalar w = SkIntToScalar(fSize.width());
+ const SkScalar h = SkIntToScalar(fSize.height());
+
+ SkRect r = SkRect::MakeWH(w, h);
+ canvas->drawRect(r, paint);
+
+ canvas->save();
+ canvas->translate(w * 5/4, 0);
+ canvas->drawRect(r, paint);
+ canvas->restore();
-static GM* MyFactory(void*) { return new PerlinNoiseGM; }
-static GMRegistry reg(MyFactory);
+ canvas->save();
+ canvas->translate(0, h + 10);
+ canvas->scale(2, 2);
+ canvas->drawRect(r, paint);
+ canvas->restore();
+
+ canvas->save();
+ canvas->translate(w + 100, h + 10);
+ canvas->scale(2, 2);
+ canvas->drawRect(r, paint);
+ canvas->restore();
+
+ // The next row should draw the same as the previous, even though we are using a local
+ // matrix instead of the canvas.
+
+ canvas->translate(0, h * 2 + 10);
+
+ SkMatrix lm;
+ lm.setScale(2, 2);
+ paint.getShader()->setLocalMatrix(lm);
+ r.fRight += r.width();
+ r.fBottom += r.height();
+
+ canvas->save();
+ canvas->translate(0, h + 10);
+ canvas->drawRect(r, paint);
+ canvas->restore();
+
+ canvas->save();
+ canvas->translate(w + 100, h + 10);
+ canvas->drawRect(r, paint);
+ canvas->restore();
+ }
+
+private:
+ typedef GM INHERITED;
+ SkISize fSize;
+};
+
+//////////////////////////////////////////////////////////////////////////////
-}
+DEF_GM( return new PerlinNoiseGM; )
+DEF_GM( return new PerlinNoiseGM2; )