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

Unified Diff: gm/perlinnoise.cpp

Issue 283533002: add new perlin noise gm to test localmatrix (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Created 6 years, 7 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gm/perlinnoise.cpp
diff --git a/gm/perlinnoise.cpp b/gm/perlinnoise.cpp
index cce5b02627d63e1491d968563b2ba6f389dfb860..1351ed718432aeada5945cf3e09cb465ab63f341 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; )
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698