Index: gm/lightingshader.cpp |
diff --git a/gm/lightingshader.cpp b/gm/lightingshader.cpp |
index ae6a24f9f0c3ce895aeae048f022c53ce0504daf..19237f78fa16a35328c22532362635ab83363a6c 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,7 @@ public: |
SkLights::Builder builder; |
builder.add(SkLights::Light(SkColor3f::Make(1.0f, 1.0f, 1.0f), |
robertphillips
2016/07/06 16:36:33
I think you want this to be normalized:
(SK_Scal
dvonbeck
2016/07/06 18:07:48
It gets normalized by the constructor, should I st
robertphillips
2016/07/06 19:11:13
It will probably make more sense to the reader. Ot
dvonbeck
2016/07/06 19:34:36
Done.
|
- SkVector3::Make(1.0f, 0.0f, 0.0f))); |
+ SkVector3::Make(1.0f, 0.0f, 0.6f))); |
builder.add(SkLights::Light(SkColor3f::Make(0.2f, 0.2f, 0.2f))); |
fLights = builder.finish(); |
@@ -95,12 +97,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); |
} |