Chromium Code Reviews| 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); |
| } |