aboutsummaryrefslogtreecommitdiffhomepage
path: root/samplecode
diff options
context:
space:
mode:
authorGravatar Jim Van Verth <jvanverth@google.com>2017-04-28 11:00:35 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-04-28 15:34:54 +0000
commitb6069dfba7b7ab563a3fccb2f38307e47035300c (patch)
treee5eb0c2ff7bf5efe4d84b2a70f6439b4f6155e0b /samplecode
parent713b8ef3748609ee20f6005a66d6aafd02aab4b6 (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.cpp30
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 +