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

Unified Diff: gm/perlinnoise.cpp

Issue 332523006: Fix tiled perlin noise. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Remove spurious .xy in GLSL shader Created 6 years, 6 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 | « expectations/gm/ignored-tests.txt ('k') | src/effects/SkPerlinNoiseShader.cpp » ('j') | 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 ee58f6f5aa037e89961044684a4603df59378889..b69b7d0476a5b0a8ecdab57d9b56b748e57e816b 100644
--- a/gm/perlinnoise.cpp
+++ b/gm/perlinnoise.cpp
@@ -24,13 +24,11 @@ protected:
return SkISize::Make(200, 500);
}
- void drawClippedRect(SkCanvas* canvas, int x, int y, const SkPaint& paint) {
+ void drawRect(SkCanvas* canvas, int x, int y, const SkPaint& paint, const SkISize& size) {
canvas->save();
- canvas->clipRect(SkRect::MakeXYWH(SkIntToScalar(x), SkIntToScalar(y),
- SkIntToScalar(fSize.width()), SkIntToScalar(fSize.height())));
- SkRect r = SkRect::MakeXYWH(SkIntToScalar(x), SkIntToScalar(y),
- SkIntToScalar(fSize.width()),
- SkIntToScalar(fSize.height()));
+ canvas->translate(SkIntToScalar(x), SkIntToScalar(y));
+ SkRect r = SkRect::MakeWH(SkIntToScalar(size.width()),
+ SkIntToScalar(size.height()));
canvas->drawRect(r, paint);
canvas->restore();
}
@@ -38,14 +36,25 @@ protected:
void test(SkCanvas* canvas, int x, int y, SkPerlinNoiseShader::Type type,
float baseFrequencyX, float baseFrequencyY, int numOctaves, float seed,
bool stitchTiles) {
+ SkISize tileSize = SkISize::Make(fSize.width() / 2, fSize.height() / 2);
SkShader* shader = (type == SkPerlinNoiseShader::kFractalNoise_Type) ?
SkPerlinNoiseShader::CreateFractalNoise(baseFrequencyX, baseFrequencyY, numOctaves,
- seed, stitchTiles ? &fSize : NULL) :
+ seed, stitchTiles ? &tileSize : NULL) :
SkPerlinNoiseShader::CreateTurbulence(baseFrequencyX, baseFrequencyY, numOctaves,
- seed, stitchTiles ? &fSize : NULL);
+ seed, stitchTiles ? &tileSize : NULL);
SkPaint paint;
paint.setShader(shader)->unref();
- drawClippedRect(canvas, x, y, paint);
+ if (stitchTiles) {
+ drawRect(canvas, x, y, paint, tileSize);
+ x += tileSize.width();
+ drawRect(canvas, x, y, paint, tileSize);
+ y += tileSize.width();
+ drawRect(canvas, x, y, paint, tileSize);
+ x -= tileSize.width();
+ drawRect(canvas, x, y, paint, tileSize);
+ } else {
+ drawRect(canvas, x, y, paint, fSize);
+ }
}
virtual void onDraw(SkCanvas* canvas) {
@@ -58,10 +67,10 @@ protected:
test(canvas, 0, 100, SkPerlinNoiseShader::kFractalNoise_Type,
0.1f, 0.1f, 2, 0, false);
test(canvas, 100, 100, SkPerlinNoiseShader::kFractalNoise_Type,
- 0.2f, 0.4f, 5, 0, true);
+ 0.05f, 0.1f, 1, 0, true);
test(canvas, 0, 200, SkPerlinNoiseShader::kTurbulence_Type,
- 0.1f, 0.1f, 2, 0, true);
+ 0.1f, 0.1f, 1, 0, true);
test(canvas, 100, 200, SkPerlinNoiseShader::kTurbulence_Type,
0.2f, 0.4f, 5, 0, false);
@@ -75,7 +84,7 @@ protected:
test(canvas, 0, 400, SkPerlinNoiseShader::kFractalNoise_Type,
0.1f, 0.1f, 2, 0, false);
test(canvas, 100, 400, SkPerlinNoiseShader::kFractalNoise_Type,
- 0.2f, 0.4f, 5, 0, true);
+ 0.1f, 0.05f, 1, 0, true);
}
private:
« no previous file with comments | « expectations/gm/ignored-tests.txt ('k') | src/effects/SkPerlinNoiseShader.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698