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() {} |