| Index: src/core/SkLightingShader.h
|
| diff --git a/src/effects/SkLightingShader.h b/src/core/SkLightingShader.h
|
| similarity index 57%
|
| rename from src/effects/SkLightingShader.h
|
| rename to src/core/SkLightingShader.h
|
| index 64d41a291e7bd8d90d402e1b33954bd3cd78a1dc..1767aeaeb68f2d5a2b40d1075afff4cc6cdf2124 100644
|
| --- a/src/effects/SkLightingShader.h
|
| +++ b/src/core/SkLightingShader.h
|
| @@ -10,15 +10,56 @@
|
| #ifndef SkLightingShader_DEFINED
|
| #define SkLightingShader_DEFINED
|
|
|
| -#include "SkPoint3.h"
|
| +#include "SkFlattenable.h"
|
| +#include "SkLight.h"
|
| #include "SkShader.h"
|
| +#include "SkTDArray.h"
|
| +
|
| +class SkBitmap;
|
| +class SkMatrix;
|
| +struct SkRSXform;
|
|
|
| class SK_API SkLightingShader {
|
| public:
|
| - struct Light {
|
| - SkVector3 fDirection; // direction towards the light (+Z is out of the screen).
|
| - // If degenerate, it will be replaced with (0, 0, 1).
|
| - SkColor3f fColor; // linear (unpremul) color. Range is 0..1 in each channel.
|
| + class Lights : public SkRefCnt {
|
| + public:
|
| + class Builder {
|
| + public:
|
| + Builder(const SkLight lights[], int numLights)
|
| + : fLights(SkNEW_ARGS(Lights, (lights, numLights))) {
|
| + }
|
| +
|
| + Builder() : fLights(SkNEW(Lights)) { }
|
| +
|
| + void add(const SkLight& light) {
|
| + if (fLights) {
|
| + *fLights->fLights.push() = light;
|
| + }
|
| + }
|
| +
|
| + const Lights* finish() {
|
| + return fLights.detach();
|
| + }
|
| +
|
| + private:
|
| + SkAutoTUnref<Lights> fLights;
|
| + };
|
| +
|
| + int numLights() const {
|
| + return fLights.count();
|
| + }
|
| +
|
| + const SkLight& light(int index) const {
|
| + return fLights[index];
|
| + }
|
| +
|
| + private:
|
| + Lights() {}
|
| + Lights(const SkLight lights[], int numLights) : fLights(lights, numLights) {}
|
| +
|
| + SkTDArray<SkLight> fLights;
|
| +
|
| + typedef SkRefCnt INHERITED;
|
| };
|
|
|
| /** Returns a shader that lights the diffuse and normal maps with a single light.
|
| @@ -50,8 +91,8 @@ public:
|
| (127, 127, 0).
|
| */
|
| static SkShader* Create(const SkBitmap& diffuse, const SkBitmap& normal,
|
| - const SkLightingShader::Light& light, const SkColor3f& ambient,
|
| - const SkMatrix* localMatrix);
|
| + const Lights* lights, const SkRSXform& xform,
|
| + const SkMatrix* diffLocalMatrix, const SkMatrix* normLocalMatrix);
|
|
|
| SK_DECLARE_FLATTENABLE_REGISTRAR_GROUP()
|
| };
|
|
|