diff options
author | Jim Van Verth <jvanverth@google.com> | 2017-04-28 11:00:35 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-04-28 15:34:54 +0000 |
commit | b6069dfba7b7ab563a3fccb2f38307e47035300c (patch) | |
tree | e5eb0c2ff7bf5efe4d84b2a70f6439b4f6155e0b /samplecode | |
parent | 713b8ef3748609ee20f6005a66d6aafd02aab4b6 (diff) |
Fix fast blur for shadow rrects.
* Handles case where blur is greater than
corner radius.
* Speeds up shader by avoiding a divide.
* Tweaks shadow sample to be more MD-ish.
Bug: skia:
Change-Id: I2990357b39784c22f02a8e51872391fd68e8226a
Reviewed-on: https://skia-review.googlesource.com/14141
Commit-Queue: Jim Van Verth <jvanverth@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
Diffstat (limited to 'samplecode')
-rw-r--r-- | samplecode/SampleAndroidShadows.cpp | 30 |
1 files changed, 6 insertions, 24 deletions
diff --git a/samplecode/SampleAndroidShadows.cpp b/samplecode/SampleAndroidShadows.cpp index 55acd57f09..02b494ff20 100644 --- a/samplecode/SampleAndroidShadows.cpp +++ b/samplecode/SampleAndroidShadows.cpp @@ -52,7 +52,7 @@ public: , fAnimAngle(0) , fShowAmbient(true) , fShowSpot(true) - , fUseAlt(true) + , fUseAlt(false) , fShowObject(true) , fIgnoreShadowAlpha(false) {} @@ -72,7 +72,7 @@ protected: fWideRectPath.addRect(SkRect::MakeXYWH(0, 0, 630, 70)); fWideOvalPath.addOval(SkRect::MakeXYWH(0, 0, 630, 70)); - fLightPos = SkPoint3::Make(-700, -700, 2800); + fLightPos = SkPoint3::Make(350, 0, 600); } // overrides from SkEventSink @@ -465,38 +465,32 @@ protected: void onDrawContent(SkCanvas* canvas) override { this->drawBG(canvas); - const SkScalar kLightWidth = 2800; - const SkScalar kAmbientAlpha = 0.25f; + const SkScalar kLightWidth = 800; + const SkScalar kAmbientAlpha = 0.1f; const SkScalar kSpotAlpha = 0.25f; SkPaint paint; paint.setAntiAlias(true); SkPoint3 lightPos = fLightPos; - lightPos.fX = canvas->getBaseLayerSize().fWidth * 0.5f; paint.setColor(SK_ColorWHITE); canvas->translate(200, 90); - lightPos.fX += 200; - lightPos.fY += 90; SkScalar zValue = SkTMax(1.0f, 2 + fZDelta); - std::function<SkScalar(SkScalar, SkScalar)> zFunc = + std::function<SkScalar(SkScalar, SkScalar)> zFunc = [zValue](SkScalar, SkScalar) { return zValue; }; this->drawShadowedPath(canvas, fRRPath, zFunc, paint, kAmbientAlpha, lightPos, kLightWidth, kSpotAlpha); paint.setColor(SK_ColorRED); canvas->translate(250, 0); - lightPos.fX += 250; - zValue = SkTMax(1.0f, 4 + fZDelta); + zValue = SkTMax(1.0f, 8 + fZDelta); zFunc = [zValue](SkScalar, SkScalar) { return zValue; }; this->drawShadowedPath(canvas, fRectPath, zFunc, paint, kAmbientAlpha, lightPos, kLightWidth, kSpotAlpha); paint.setColor(SK_ColorBLUE); canvas->translate(-250, 110); - lightPos.fX -= 250; - lightPos.fY += 110; zValue = SkTMax(1.0f, 12 + fZDelta); zFunc = [zValue](SkScalar, SkScalar) { return zValue; }; this->drawShadowedPath(canvas, fCirclePath, zFunc, paint, kAmbientAlpha, @@ -504,7 +498,6 @@ protected: paint.setColor(SK_ColorGREEN); canvas->translate(250, 0); - lightPos.fX += 250; zValue = SkTMax(1.0f, 64 + fZDelta); zFunc = [zValue](SkScalar, SkScalar) { return zValue; }; this->drawShadowedPath(canvas, fRRPath, zFunc, paint, kAmbientAlpha, @@ -512,8 +505,6 @@ protected: paint.setColor(SK_ColorYELLOW); canvas->translate(-250, 110); - lightPos.fX -= 250; - lightPos.fY += 110; zValue = SkTMax(1.0f, 8 + fZDelta); zFunc = [zValue](SkScalar, SkScalar) { return zValue; }; this->drawShadowedPath(canvas, fFunkyRRPath, zFunc, paint, kAmbientAlpha, @@ -521,7 +512,6 @@ protected: paint.setColor(SK_ColorCYAN); canvas->translate(250, 0); - lightPos.fX += 250; zValue = SkTMax(1.0f, 16 + fZDelta); zFunc = [zValue](SkScalar, SkScalar) { return zValue; }; this->drawShadowedPath(canvas, fCubicPath, zFunc, paint, @@ -535,8 +525,6 @@ protected: paint.setColor(SK_ColorMAGENTA); canvas->translate(-125, 60); - lightPos.fX -= 125; - lightPos.fY += 60; zValue = SkTMax(1.0f, 32 + fZDelta); zFunc = [zValue](SkScalar, SkScalar) { return zValue; }; this->drawShadowedPath(canvas, tmpPath, zFunc, paint, .1f, @@ -555,9 +543,6 @@ protected: persp.preTranslate(-pivot.fX, -pivot.fY); persp.postTranslate(pivot.fX + translate.fX, pivot.fY + translate.fY); canvas->setMatrix(persp); - lightPos = fLightPos; - lightPos.fX += pivot.fX + translate.fX; - lightPos.fY += pivot.fY + translate.fY; zValue = SkTMax(1.0f, 16 + fZDelta); SkScalar radians = SkDegreesToRadians(fAnimAngle); zFunc = [zValue, pivot, radians](SkScalar x, SkScalar y) { @@ -576,9 +561,6 @@ protected: persp.preTranslate(-pivot.fX, -pivot.fY); persp.postTranslate(pivot.fX + translate.fX, pivot.fY + translate.fY); canvas->setMatrix(persp); - lightPos = fLightPos; - lightPos.fX += pivot.fX + translate.fX; - lightPos.fY += pivot.fY + translate.fY; zValue = SkTMax(1.0f, 32 + fZDelta); zFunc = [zValue, pivot, radians](SkScalar x, SkScalar y) { return -SkScalarSin(radians)*x + |