| Index: include/core/SkLights.h
|
| diff --git a/include/core/SkLights.h b/include/core/SkLights.h
|
| index c5c54276a39597909ff53a0465a6e97fee5a8743..0b23cc14aa01fa742133e5dfdf332f24d8e6a334 100644
|
| --- a/include/core/SkLights.h
|
| +++ b/include/core/SkLights.h
|
| @@ -12,6 +12,7 @@
|
| #include "SkPoint3.h"
|
| #include "SkRefCnt.h"
|
| #include "../private/SkTDArray.h"
|
| +#include "SkImage.h"
|
|
|
| class SK_API SkLights : public SkRefCnt {
|
| public:
|
| @@ -26,6 +27,7 @@ public:
|
| : fType(kAmbient_LightType)
|
| , fColor(color) {
|
| fDirection.set(0.0f, 0.0f, 1.0f);
|
| + fShadowMap.reset(nullptr);
|
| }
|
|
|
| Light(const SkColor3f& color, const SkVector3& dir)
|
| @@ -35,6 +37,7 @@ public:
|
| if (!fDirection.normalize()) {
|
| fDirection.set(0.0f, 0.0f, 1.0f);
|
| }
|
| + fShadowMap.reset(nullptr);
|
| }
|
|
|
| LightType type() const { return fType; }
|
| @@ -44,11 +47,35 @@ public:
|
| return fDirection;
|
| }
|
|
|
| + void setShadowMap(sk_sp<SkImage> shadowMap) {
|
| + fShadowMap = std::move(shadowMap);
|
| + }
|
| +
|
| + sk_sp<SkImage> getShadowMap() const {
|
| + return fShadowMap;
|
| + }
|
| +
|
| + Light& operator= (const Light& b) {
|
| + if (this == &b)
|
| + return *this;
|
| +
|
| + this->fColor = b.fColor;
|
| + this->fType = b.fType;
|
| + this->fDirection = b.fDirection;
|
| +
|
| + if (b.fShadowMap) {
|
| + this->fShadowMap = b.fShadowMap;
|
| + }
|
| +
|
| + return *this;
|
| + }
|
| +
|
| private:
|
| LightType fType;
|
| SkColor3f fColor; // linear (unpremul) color. Range is 0..1 in each channel.
|
| SkVector3 fDirection; // direction towards the light (+Z is out of the screen).
|
| // If degenerate, it will be replaced with (0, 0, 1).
|
| + sk_sp<SkImage> fShadowMap;
|
| };
|
|
|
| class Builder {
|
| @@ -57,7 +84,7 @@ public:
|
|
|
| void add(const Light& light) {
|
| if (fLights) {
|
| - *fLights->fLights.push() = light;
|
| + (void) fLights->fLights.append(1, &light);
|
| }
|
| }
|
|
|
| @@ -77,6 +104,10 @@ public:
|
| return fLights[index];
|
| }
|
|
|
| + Light& light(int index) {
|
| + return fLights[index];
|
| + }
|
| +
|
| private:
|
| SkLights() {}
|
|
|
|
|