Chromium Code Reviews| Index: samplecode/SampleShadowing.cpp |
| diff --git a/samplecode/SampleShadowing.cpp b/samplecode/SampleShadowing.cpp |
| index 37eec18ba43a120f591b20d6863f01480b453e7d..df5cd2c4724bf07a3e423043f3403382ab68c14c 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); |
| + |
|
robertphillips
2016/08/24 17:34:37
this->
vjiaoblack
2016/08/24 18:00:39
Done.
|
| + 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); |
| + |
|
robertphillips
2016/08/24 17:34:37
this->
vjiaoblack
2016/08/24 18:00:39
Done.
|
| + 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; |