| Index: include/core/SkCanvas.h
|
| diff --git a/include/core/SkCanvas.h b/include/core/SkCanvas.h
|
| index 35a8d1c7b92193a4d247a4766efe54a2976ce0a6..2c6a807791a955d21c7cb06eeaf84ebc7ee6d84a 100644
|
| --- a/include/core/SkCanvas.h
|
| +++ b/include/core/SkCanvas.h
|
| @@ -17,6 +17,7 @@
|
| #include "SkRegion.h"
|
| #include "SkSurfaceProps.h"
|
| #include "SkXfermode.h"
|
| +#include "SkLights.h"
|
|
|
| class GrContext;
|
| class GrDrawContext;
|
| @@ -451,6 +452,7 @@ public:
|
| */
|
| void resetMatrix();
|
|
|
| +#ifdef SK_USE_SHADOWS
|
| /** Add the specified translation to the current draw depth of the canvas.
|
| @param z The distance to translate in Z.
|
| Negative into screen, positive out of screen.
|
| @@ -458,6 +460,16 @@ public:
|
| */
|
| void translateZ(SkScalar z);
|
|
|
| + /** Set the current set of lights in the canvas.
|
| + @param lights The lights that we want the canvas to have.
|
| + */
|
| + void setLights(sk_sp<SkLights> lights);
|
| +
|
| + /** Returns the current set of lights the canvas uses
|
| + */
|
| + sk_sp<SkLights> getLights() const;
|
| +#endif
|
| +
|
| /**
|
| * Modify the current clip with the specified rectangle.
|
| * @param rect The rect to combine with the current clip
|
| @@ -1049,6 +1061,34 @@ public:
|
| this->drawPicture(picture.get(), matrix, paint);
|
| }
|
|
|
| +#ifdef SK_USE_SHADOWS
|
| + /**
|
| + * Draw the picture into this canvas.
|
| + *
|
| + * We will use the canvas's lights along with the picture information (draw depths of
|
| + * objects, etc) to first create a set of shadowmaps for the light-picture pairs, and
|
| + * then use that set of shadowmaps to render the scene with shadows.
|
| + *
|
| + * If matrix is non-null, apply that matrix to the CTM when drawing this picture. This is
|
| + * logically equivalent to
|
| + * save/concat/drawPicture/restore
|
| + *
|
| + * If paint is non-null, draw the picture into a temporary buffer, and then apply the paint's
|
| + * alpha/colorfilter/imagefilter/xfermode to that buffer as it is drawn to the canvas.
|
| + * This is logically equivalent to
|
| + * saveLayer(paint)/drawPicture/restore
|
| + *
|
| + */
|
| + void drawShadowedPicture(const SkPicture*,
|
| + const SkMatrix* matrix,
|
| + const SkPaint* paint);
|
| + void drawShadowedPicture(const sk_sp<SkPicture>& picture,
|
| + const SkMatrix* matrix,
|
| + const SkPaint* paint) {
|
| + this->drawShadowedPicture(picture.get(), matrix, paint);
|
| + }
|
| +#endif
|
| +
|
| enum VertexMode {
|
| kTriangles_VertexMode,
|
| kTriangleStrip_VertexMode,
|
| @@ -1267,10 +1307,14 @@ public:
|
| void temporary_internal_describeTopLayer(SkMatrix* matrix, SkIRect* clip_bounds);
|
|
|
| protected:
|
| +#ifdef SK_USE_SHADOWS
|
| /** Returns the current (cumulative) draw depth of the canvas.
|
| */
|
| SkScalar getZ() const;
|
|
|
| + sk_sp<SkLights> fLights;
|
| +#endif
|
| +
|
| /** After calling saveLayer(), there can be any number of devices that make
|
| up the top-most drawing area. LayerIter can be used to iterate through
|
| those devices. Note that the iterator is only valid until the next API
|
| @@ -1336,7 +1380,10 @@ protected:
|
| virtual void didRestore() {}
|
| virtual void didConcat(const SkMatrix&) {}
|
| virtual void didSetMatrix(const SkMatrix&) {}
|
| +
|
| +#ifdef SK_USE_SHADOWS
|
| virtual void didTranslateZ(SkScalar) {}
|
| +#endif
|
|
|
| virtual void onDrawAnnotation(const SkRect&, const char key[], SkData* value);
|
| virtual void onDrawDRRect(const SkRRect&, const SkRRect&, const SkPaint&);
|
| @@ -1403,6 +1450,12 @@ protected:
|
|
|
| virtual void onDrawPicture(const SkPicture*, const SkMatrix*, const SkPaint*);
|
|
|
| +#ifdef SK_USE_SHADOWS
|
| + virtual void onDrawShadowedPicture(const SkPicture*,
|
| + const SkMatrix*,
|
| + const SkPaint*);
|
| +#endif
|
| +
|
| // Returns the canvas to be used by DrawIter. Default implementation
|
| // returns this. Subclasses that encapsulate an indirect canvas may
|
| // need to overload this method. The impl must keep track of this, as it
|
|
|