Chromium Code Reviews| Index: src/core/SkShadowShader.cpp |
| diff --git a/src/core/SkShadowShader.cpp b/src/core/SkShadowShader.cpp |
| index 09d0bcaf5080c2822b3abd9dc4e7cb17bb1efaac..372a0faee6ff1e89ac4962b05d60e53cfc4ce0ee 100644 |
| --- a/src/core/SkShadowShader.cpp |
| +++ b/src/core/SkShadowShader.cpp |
| @@ -765,8 +765,23 @@ void SkShadowShaderImpl::ShadowShaderContext::shadeSpan(int x, int y, |
| totalLight.fX += light.dir().fZ * light.color().fX * lightProb; |
| totalLight.fY += light.dir().fZ * light.color().fY * lightProb; |
| totalLight.fZ += light.dir().fZ * light.color().fZ * lightProb; |
| - } else { |
| - totalLight += light.color(); |
| + |
|
robertphillips
2016/08/31 13:44:27
Maybe:
} else {
SkASSERT(light.type() == SkLig
vjiaoblack
2016/08/31 13:53:27
Done.
|
| + } else if (light.type() == SkLights::Light::kPoint_LightType) { |
|
robertphillips
2016/08/31 13:44:27
Move this line out of the if-then block and share
vjiaoblack
2016/08/31 13:53:27
Done.
|
| + int pvDepth = SkColorGetB(povDepthColor); |
| + |
| + SkVector3 fragToLight = SkVector3::Make(light.pos().fX - (x + i), |
|
robertphillips
2016/08/31 13:44:27
where's this 400 coming from?
vjiaoblack
2016/08/31 13:53:27
Done.
|
| + light.pos().fY - (400 - y), |
| + light.pos().fZ - pvDepth); |
| + |
| + SkScalar dist = fragToLight.length(); |
| + SkScalar normalizedZ = fragToLight.fZ / dist; |
| + |
| + SkScalar attenuationValue = dist / light.intensity(); |
|
jvanverth1
2016/08/31 17:18:23
This is the old lighting equation.
vjiaoblack
2016/08/31 17:58:28
Done.
|
| + attenuationValue = attenuationValue * attenuationValue + 1.0f; |
| + |
|
robertphillips
2016/08/31 13:44:27
// assume object normals are pointing straight up
vjiaoblack
2016/08/31 13:53:27
Done.
|
| + totalLight.fX += normalizedZ * light.color().fX / attenuationValue; |
|
jvanverth1
2016/08/31 17:18:22
If you precompute 1/attenuation and multiply by th
vjiaoblack
2016/08/31 17:58:28
Done.
|
| + totalLight.fY += normalizedZ * light.color().fY / attenuationValue; |
| + totalLight.fZ += normalizedZ * light.color().fZ / attenuationValue; |
| } |
| } |