| Index: samplecode/SampleShadowing.cpp
|
| diff --git a/samplecode/SampleShadowing.cpp b/samplecode/SampleShadowing.cpp
|
| index 37eec18ba43a120f591b20d6863f01480b453e7d..e27b4cff328d1a1b0059d5c3e610849c56f8bdd7 100644
|
| --- a/samplecode/SampleShadowing.cpp
|
| +++ b/samplecode/SampleShadowing.cpp
|
| @@ -38,13 +38,31 @@ public:
|
| fTestRects[2].fDepth = 240;
|
| fTestRects[2].fGeometry = SkRect::MakeLTRB(100,100,250,250);
|
|
|
| + fSliders[0].fGeometry = SkRect::MakeLTRB(20, 400, 30, 420);
|
| + fSliders[0].fOffset = 0.0f;
|
| + fSliders[0].fScale = 0.1f;
|
| +
|
| + fSliders[1].fGeometry = SkRect::MakeLTRB(100, 420, 110, 440);
|
| + fSliders[1].fOffset = 0.0f;
|
| + fSliders[1].fScale = 10.0f;
|
| +
|
| + fSliders[2].fGeometry = SkRect::MakeLTRB(0, 440, 10, 460);
|
| + fSliders[2].fOffset = 0.0f;
|
| + fSliders[2].fScale = 0.0025f;
|
| +
|
| fSceneChanged = true;
|
| fLightsChanged = true;
|
|
|
| fSelectedRect = -1;
|
| + fSelectedSlider = -1;
|
| fMoveLight = false;
|
|
|
| fClearShadowMaps = false;
|
| +
|
| + fShadowParams.fShadowRadius = 2.0f;
|
| + fShadowParams.fBiasingConstant = 0.3f;
|
| + fShadowParams.fMinVariance = 1024;
|
| + fShadowParams.fType = SkShadowParams::kVariance_ShadowType;
|
| }
|
|
|
| protected:
|
| @@ -67,6 +85,15 @@ protected:
|
| // the shadow maps will be re-generated according to the new backend.
|
| fClearShadowMaps = true;
|
| break;
|
| + case 'B':
|
| + if (SkShadowParams::kVariance_ShadowType == fShadowParams.fType) {
|
| + fShadowParams.fType = SkShadowParams::kNoBlur_ShadowType;
|
| + } else if (SkShadowParams::kNoBlur_ShadowType ==
|
| + fShadowParams.fType) {
|
| + fShadowParams.fType = SkShadowParams::kVariance_ShadowType;
|
| + }
|
| + fLightsChanged = true;
|
| + break;
|
| default:
|
| break;
|
| }
|
| @@ -113,19 +140,46 @@ protected:
|
| for (int i = 0; i < fLights->numLights(); i++) {
|
| fLights->light(i).setShadowMap(nullptr);
|
| }
|
| +
|
| fSceneChanged = false;
|
| fLightsChanged = false;
|
| fClearShadowMaps = false;
|
| }
|
|
|
| canvas->setLights(fLights);
|
| - canvas->drawShadowedPicture(fPicture, nullptr, nullptr);
|
| + canvas->drawShadowedPicture(fPicture, nullptr, nullptr, fShadowParams);
|
| +
|
| + for (int i = 0; i < kNumSliders; i++) {
|
| + SkPaint paint;
|
| + paint.setColor(SK_ColorBLACK);
|
| + canvas->drawRect(fSliders[i].fGeometry, paint);
|
| + }
|
| }
|
|
|
| SkView::Click* onFindClickHandler(SkScalar x, SkScalar y, unsigned modi) override {
|
| return new SkView::Click(this);
|
| }
|
|
|
| + void updateFromSelectedSlider() {
|
| + SkScalar newValue = fSliders[fSelectedSlider].fGeometry.fLeft *
|
| + fSliders[fSelectedSlider].fScale +
|
| + fSliders[fSelectedSlider].fOffset;
|
| +
|
| + switch (fSelectedSlider) {
|
| + case 0:
|
| + fShadowParams.fShadowRadius = newValue;
|
| + break;
|
| + case 1:
|
| + fShadowParams.fMinVariance = newValue;
|
| + break;
|
| + case 2:
|
| + fShadowParams.fBiasingConstant = newValue;
|
| + break;
|
| + default:
|
| + break;
|
| + }
|
| + }
|
| +
|
| bool onClick(Click *click) override {
|
| SkScalar x = click->fCurr.fX;
|
| SkScalar y = click->fCurr.fY;
|
| @@ -161,6 +215,7 @@ protected:
|
|
|
| if (click->fState == Click::State::kUp_State) {
|
| fSelectedRect = -1;
|
| + fSelectedSlider = -1;
|
| return true;
|
| }
|
|
|
| @@ -172,6 +227,16 @@ protected:
|
| return true;
|
| }
|
|
|
| + if (fSelectedSlider > -1) {
|
| + fSliders[fSelectedSlider].fGeometry.offset(dx, 0);
|
| +
|
| + this->updateFromSelectedSlider();
|
| +
|
| + fLightsChanged = true;
|
| + this->inval(nullptr);
|
| + return true;
|
| + }
|
| +
|
| // assume last elements are highest
|
| for (int i = kNumTestRects - 1; i >= 0; i--) {
|
| if (fTestRects[i].fGeometry.contains(SkRect::MakeXYWH(x, y, 1, 1))) {
|
| @@ -184,30 +249,51 @@ protected:
|
| }
|
| }
|
|
|
| + for (int i = 0; i <= kNumSliders; i++) {
|
| + if (fSliders[i].fGeometry.contains(SkRect::MakeXYWH(x, y, 1, 1))) {
|
| + fSelectedSlider = i;
|
| + fSliders[i].fGeometry.offset(dx, 0);
|
| +
|
| + this->updateFromSelectedSlider();
|
| +
|
| + fLightsChanged = true;
|
| +
|
| + this->inval(nullptr);
|
| + break;
|
| + }
|
| + }
|
| +
|
| return true;
|
| }
|
|
|
| private:
|
| static constexpr int kNumTestRects = 3;
|
| + static constexpr int kNumSliders = 3;
|
|
|
| static const int kWidth = 400;
|
| static const int kHeight = 400;
|
| - bool fClearShadowMaps;
|
|
|
| struct {
|
| SkRect fGeometry;
|
| int fDepth;
|
| SkColor fColor;
|
| } fTestRects[kNumTestRects];
|
| -
|
| int fSelectedRect;
|
| - bool fMoveLight;
|
|
|
| - sk_sp<SkPicture> fPicture;
|
| + struct {
|
| + SkRect fGeometry;
|
| + SkScalar fOffset;
|
| + SkScalar fScale;
|
| + } fSliders[kNumSliders];
|
| + int fSelectedSlider;
|
|
|
| + bool fClearShadowMaps;
|
| + bool fMoveLight;
|
| bool fSceneChanged;
|
| bool fLightsChanged;
|
|
|
| + sk_sp<SkPicture> fPicture;
|
| + SkShadowParams fShadowParams;
|
| sk_sp<SkLights> fLights;
|
|
|
| typedef SampleView INHERITED;
|
|
|