aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkLights.cpp
diff options
context:
space:
mode:
authorGravatar vjiaoblack <vjiaoblack@google.com>2016-08-26 08:49:46 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2016-08-26 08:49:46 -0700
commit56f33ea2acb39ebb041340a8ab7564facb95afce (patch)
tree0a50af0bc85cd2cd795498b71a5a7dddd1ad6ddd /src/core/SkLights.cpp
parent6a3976114d8a6aaa564c3c7571cfe7d1727a3a6e (diff)
Added distance attenuation and diffuse shading to PointLights
Diffstat (limited to 'src/core/SkLights.cpp')
-rw-r--r--src/core/SkLights.cpp13
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) {