Chromium Code Reviews| Index: samplecode/SampleShadowing.cpp |
| diff --git a/samplecode/SampleShadowing.cpp b/samplecode/SampleShadowing.cpp |
| index 7b434bca80a5fc5a5be323c4b54f84594e7bc2e4..cd4286228789bb7bfb7375d93ecfe34de435a265 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_BlurAlgorithm; |
| } |
| protected: |
| @@ -67,6 +85,14 @@ protected: |
| // the shadow maps will be re-generated according to the new backend. |
| fClearShadowMaps = true; |
| break; |
| + case 'B': |
| + if (fShadowParams.fType == SkShadowParams::kVariance_BlurAlgorithm) { |
| + fShadowParams.fType = SkShadowParams::kNoBlur_BlurAlgorithm; |
| + } else if (fShadowParams.fType == |
| + SkShadowParams::kNoBlur_BlurAlgorithm) { |
| + fShadowParams.fType = SkShadowParams::kVariance_BlurAlgorithm; |
| + } |
| + fLightsChanged = true; |
|
robertphillips
2016/08/16 19:36:08
"break;" here ?
vjiaoblack
2016/08/17 12:58:56
Done.
|
| default: |
| break; |
| } |
| @@ -113,12 +139,19 @@ 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, fShadowParams); |
| - canvas->setLights(fLights); |
| - canvas->drawShadowedPicture(fPicture, nullptr, nullptr); |
| + for (int i = 0; i < kNumSliders; i++) { |
| + SkPaint paint; |
| + paint.setColor(SK_ColorBLACK); |
| + canvas->drawRect(fSliders[i].fGeometry, paint); |
| } |
| } |
| @@ -158,6 +191,7 @@ protected: |
| if (click->fState == Click::State::kUp_State) { |
| fSelectedRect = -1; |
| + fSelectedSlider = -1; |
| return true; |
| } |
| @@ -169,6 +203,32 @@ protected: |
| return true; |
| } |
| + if (fSelectedSlider > -1) { |
| + fSliders[fSelectedSlider].fGeometry.offset(dx, 0); |
| + |
| + 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; |
| + } |
| + |
| + 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))) { |
| @@ -181,30 +241,67 @@ 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, dy); |
| + |
| + 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; |
| + } |
| + |
| + 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; |