diff options
author | vjiaoblack <vjiaoblack@google.com> | 2016-08-26 08:49:46 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-08-26 08:49:46 -0700 |
commit | 56f33ea2acb39ebb041340a8ab7564facb95afce (patch) | |
tree | 0a50af0bc85cd2cd795498b71a5a7dddd1ad6ddd /src/core/SkLights.cpp | |
parent | 6a3976114d8a6aaa564c3c7571cfe7d1727a3a6e (diff) |
Added distance attenuation and diffuse shading to PointLights
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2246463004
Review-Url: https://codereview.chromium.org/2246463004
Diffstat (limited to 'src/core/SkLights.cpp')
-rw-r--r-- | src/core/SkLights.cpp | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/core/SkLights.cpp b/src/core/SkLights.cpp index a172de4fab..7d8f9ed7a5 100644 --- a/src/core/SkLights.cpp +++ b/src/core/SkLights.cpp @@ -29,6 +29,10 @@ sk_sp<SkLights> SkLights::MakeFromBuffer(SkReadBuffer& buf) { if (!buf.readScalarArray(&dirOrPos.fX, 3)) { return nullptr; } + SkScalar intensity = 0.0f; + if (isPoint) { + intensity = buf.readScalar(); + } sk_sp<SkImage> depthMap; bool hasShadowMap = buf.readBool(); @@ -39,7 +43,7 @@ sk_sp<SkLights> SkLights::MakeFromBuffer(SkReadBuffer& buf) { } if (isPoint) { - Light light = Light::MakePoint(color, dirOrPos); + Light light = Light::MakePoint(color, dirOrPos, intensity); light.setShadowMap(depthMap); builder.add(light); } else { @@ -66,7 +70,12 @@ void SkLights::flatten(SkWriteBuffer& buf) const { buf.writeBool(isPoint); buf.writeScalarArray(&light.color().fX, 3); if (!isAmbient) { - buf.writeScalarArray(&light.dir().fX, 3); + if (isPoint) { + buf.writeScalarArray(&light.pos().fX, 3); + buf.writeScalar(light.intensity()); + } else { + buf.writeScalarArray(&light.dir().fX, 3); + } bool hasShadowMap = light.getShadowMap() != nullptr; buf.writeBool(hasShadowMap); if (hasShadowMap) { |