From: commit-bot@chromium.org Date: Wed, 6 Nov 2013 10:08:38 +0000 (+0000) Subject: Perlin issue fixed X-Git-Tag: accepted/tizen/5.0/unified/20181102.025319~10130 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c2a0ea6418988d4bcc0719f99b1a110cecd08679;p=platform%2Fupstream%2FlibSkiaSharp.git Perlin issue fixed BUG=skia:1799 R=sugoi@chromium.org, sugoi@google.com, senorblanco@chromium.org Author: bsalomon@google.com Review URL: https://codereview.chromium.org/59173005 git-svn-id: http://skia.googlecode.com/svn/trunk@12150 2bbb7eff-a529-9590-31e7-b0007b416f81 --- diff --git a/expectations/gm/ignored-tests.txt b/expectations/gm/ignored-tests.txt index 5db45ea..2b60fb2 100644 --- a/expectations/gm/ignored-tests.txt +++ b/expectations/gm/ignored-tests.txt @@ -71,3 +71,6 @@ imagefilterscropped imagefiltersbase imageblur colorfilterimagefilter + +# Added by sugoi in https://codereview.chromium.org/59173005 +perlinnoise diff --git a/gm/perlinnoise.cpp b/gm/perlinnoise.cpp index a2ec916..098c690 100644 --- a/gm/perlinnoise.cpp +++ b/gm/perlinnoise.cpp @@ -23,7 +23,7 @@ protected: } virtual SkISize onISize() { - return make_isize(200, 400); + return make_isize(200, 500); } void drawClippedRect(SkCanvas* canvas, int x, int y, const SkPaint& paint) { @@ -52,27 +52,31 @@ protected: virtual void onDraw(SkCanvas* canvas) { canvas->clear(0x00000000); + test(canvas, 0, 0, SkPerlinNoiseShader::kFractalNoise_Type, + 0.1f, 0.1f, 0, 0, false); + test(canvas, 100, 0, SkPerlinNoiseShader::kTurbulence_Type, + 0.1f, 0.1f, 0, 0, false); - test(canvas, 0, 0, SkPerlinNoiseShader::kFractalNoise_Type, + test(canvas, 0, 100, SkPerlinNoiseShader::kFractalNoise_Type, 0.1f, 0.1f, 2, 0, false); - test(canvas, 100, 0, SkPerlinNoiseShader::kFractalNoise_Type, + test(canvas, 100, 100, SkPerlinNoiseShader::kFractalNoise_Type, 0.2f, 0.4f, 5, 0, true); - test(canvas, 0, 100, SkPerlinNoiseShader::kTurbulence_Type, + test(canvas, 0, 200, SkPerlinNoiseShader::kTurbulence_Type, 0.1f, 0.1f, 2, 0, true); - test(canvas, 100, 100, SkPerlinNoiseShader::kTurbulence_Type, + test(canvas, 100, 200, SkPerlinNoiseShader::kTurbulence_Type, 0.2f, 0.4f, 5, 0, false); - test(canvas, 0, 200, SkPerlinNoiseShader::kFractalNoise_Type, + test(canvas, 0, 300, SkPerlinNoiseShader::kFractalNoise_Type, 0.1f, 0.1f, 3, 1, false); - test(canvas, 100, 200, SkPerlinNoiseShader::kFractalNoise_Type, + test(canvas, 100, 300, SkPerlinNoiseShader::kFractalNoise_Type, 0.1f, 0.1f, 3, 4, false); canvas->scale(SkFloatToScalar(0.75f), SkFloatToScalar(1.0f)); - test(canvas, 0, 300, SkPerlinNoiseShader::kFractalNoise_Type, + test(canvas, 0, 400, SkPerlinNoiseShader::kFractalNoise_Type, 0.1f, 0.1f, 2, 0, false); - test(canvas, 100, 300, SkPerlinNoiseShader::kFractalNoise_Type, + test(canvas, 100, 400, SkPerlinNoiseShader::kFractalNoise_Type, 0.2f, 0.4f, 5, 0, true); } diff --git a/src/effects/SkPerlinNoiseShader.cpp b/src/effects/SkPerlinNoiseShader.cpp index af51afc..f2ce679 100644 --- a/src/effects/SkPerlinNoiseShader.cpp +++ b/src/effects/SkPerlinNoiseShader.cpp @@ -7,6 +7,7 @@ #include "SkDither.h" #include "SkPerlinNoiseShader.h" +#include "SkColorFilter.h" #include "SkFlattenableBuffers.h" #include "SkShader.h" #include "SkUnPreMultiply.h" @@ -1295,6 +1296,16 @@ void GrGLSimplexNoise::setData(const GrGLUniformManager& uman, const GrDrawEffec GrEffectRef* SkPerlinNoiseShader::asNewEffect(GrContext* context, const SkPaint& paint) const { SkASSERT(NULL != context); + if (0 == fNumOctaves) { + SkColor clearColor = 0; + if (kFractalNoise_Type == fType) { + clearColor = SkColorSetARGB(paint.getAlpha() / 2, 127, 127, 127); + } + SkAutoTUnref cf(SkColorFilter::CreateModeFilter( + clearColor, SkXfermode::kSrc_Mode)); + return cf->asNewEffect(context); + } + // Either we don't stitch tiles, either we have a valid tile size SkASSERT(!fStitchTiles || !fTileSize.isEmpty());