Index: gm/lightingshader.cpp |
diff --git a/gm/lightingshader.cpp b/gm/lightingshader.cpp |
index ae6a24f9f0c3ce895aeae048f022c53ce0504daf..3b1c224f2bf980ab91a3e2524d36a4eaa2b22b10 100644 |
--- a/gm/lightingshader.cpp |
+++ b/gm/lightingshader.cpp |
@@ -7,7 +7,9 @@ |
#include "gm.h" |
+#include "SkBitmapProcShader.h" |
#include "SkLightingShader.h" |
+#include "SkNormalSource.h" |
#include "SkPoint3.h" |
#include "SkShader.h" |
@@ -49,7 +51,9 @@ public: |
SkLights::Builder builder; |
builder.add(SkLights::Light(SkColor3f::Make(1.0f, 1.0f, 1.0f), |
- SkVector3::Make(1.0f, 0.0f, 0.0f))); |
+ SkVector3::Make(SK_ScalarRoot2Over2, |
+ 0.0f, |
+ SK_ScalarRoot2Over2))); |
builder.add(SkLights::Light(SkColor3f::Make(0.2f, 0.2f, 0.2f))); |
fLights = builder.finish(); |
@@ -95,12 +99,13 @@ protected: |
const SkMatrix& ctm = canvas->getTotalMatrix(); |
- // TODO: correctly pull out the pure rotation |
- SkVector invNormRotation = { ctm[SkMatrix::kMScaleX], ctm[SkMatrix::kMSkewY] }; |
- |
SkPaint paint; |
- paint.setShader(SkLightingShader::Make(fDiffuse, fNormalMaps[mapType], fLights, |
- invNormRotation, &matrix, &matrix)); |
+ sk_sp<SkShader> normalMap = SkMakeBitmapShader(fNormalMaps[mapType], |
+ SkShader::kClamp_TileMode, SkShader::kClamp_TileMode, &matrix, nullptr); |
+ sk_sp<SkNormalSource> normalSource = SkNormalSource::MakeFromNormalMap(std::move(normalMap), |
+ ctm); |
+ paint.setShader(SkLightingShader::Make(fDiffuse, fLights, &matrix, |
+ std::move(normalSource))); |
canvas->drawRect(r, paint); |
} |