Index: gm/lightingshader.cpp |
diff --git a/gm/lightingshader.cpp b/gm/lightingshader.cpp |
index 2cf4a953d800b78c0577a57f48daa020168ee698..e2f616fa67d646d6a5d9029384388b66b7f2db0d 100644 |
--- a/gm/lightingshader.cpp |
+++ b/gm/lightingshader.cpp |
@@ -112,6 +112,25 @@ protected: |
canvas->drawRect(r, paint); |
} |
+ void drawBevelRect(SkCanvas* canvas, const SkRect& r) { |
+ |
robertphillips
2016/07/13 14:39:02
This is fine. There is a SkBitmap::getBounds entry
dvonbeck
2016/07/13 16:09:16
Acknowledged.
|
+ SkRect bitmapBounds = SkRect::MakeIWH(fDiffuse.width(), fDiffuse.height()); |
+ |
+ SkMatrix matrix; |
+ matrix.setRectToRect(bitmapBounds, r, SkMatrix::kFill_ScaleToFit); |
+ |
+ SkPaint paint; |
+ auto diffuseShader = SkBitmapProcShader::MakeBitmapShader(fDiffuse, |
+ SkShader::kClamp_TileMode, SkShader::kClamp_TileMode, &matrix); |
+ auto normalSource = SkNormalSource::MakeBevel(SkNormalSource::BevelType::kLinear, |
+ 0.15f * SkIntToScalar(kTexSize), |
+ 0.2f * SkIntToScalar(kTexSize)); |
+ paint.setShader(SkLightingShader::Make(std::move(diffuseShader), std::move(normalSource), |
+ fLights)); |
+ |
+ canvas->drawRect(r, paint); |
+ } |
+ |
void onDraw(SkCanvas* canvas) override { |
SkMatrix m; |
SkRect r; |
@@ -136,7 +155,7 @@ protected: |
m.setRotate(45.0f, r.centerX(), r.centerY()); |
m.postTranslate(0.0f, kGMSize/2.0f - kTexSize/2.0f); |
canvas->setMatrix(m); |
- this->drawRect(canvas, r, kFrustum_NormalMap); |
+ this->drawBevelRect(canvas, r); |
canvas->restore(); |
} |