Index: include/core/SkMultiPictureDraw.h |
diff --git a/include/core/SkMultiPictureDraw.h b/include/core/SkMultiPictureDraw.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..d8d9cb7ecdcaa0492ed665e2edd1f240d0a5573b |
--- /dev/null |
+++ b/include/core/SkMultiPictureDraw.h |
@@ -0,0 +1,68 @@ |
+/* |
+ * Copyright 2014 Google Inc. |
+ * |
+ * Use of this source code is governed by a BSD-style license that can be |
+ * found in the LICENSE file. |
+ */ |
+ |
+#ifndef SkMultiPictureDraw_DEFINED |
+#define SkMultiPictureDraw_DEFINED |
+ |
+#include "SkMatrix.h" |
+#include "SkTDArray.h" |
+ |
+class SkCanvas; |
+class SkPaint; |
+class SkPicture; |
+ |
+/** \class SkMultiPictureDraw |
+ |
+ The MultiPictureDraw object accepts several picture/canvas pairs and |
+ then attempts to optimally draw the pictures into the canvases, sharing |
+ as many resources as possible. |
+*/ |
+class SK_API SkMultiPictureDraw { |
+public: |
+ /** |
+ * Create an object to optimize the drawing of multiple pictures. |
+ * @param reserve Hint for the number of add calls expected to be issued |
+ */ |
+ SkMultiPictureDraw(int reserve = 0); |
+ ~SkMultiPictureDraw() { this->reset(); } |
+ |
+ /** |
+ * Add a canvas/picture pair for later rendering. |
+ * @param canvas the canvas in which to draw picture |
+ * @param picture the picture to draw into canvas |
+ * @param matrix if non-NULL, applied to the CTM when drawing |
+ * @param paint if non-NULL, draw picture to a temporary buffer |
+ * and then apply the paint when the result is drawn |
+ */ |
+ void add(SkCanvas* canvas, |
+ const SkPicture* picture, |
+ const SkMatrix* matrix = NULL, |
+ const SkPaint* paint = NULL); |
+ |
+ /** |
+ * Perform all the previously added draws. This will reset the state |
+ * of this object. |
+ */ |
+ void draw(); |
+ |
+ /** |
+ * Abandon all buffered draws and reset to the initial state. |
+ */ |
+ void reset(); |
+ |
+private: |
+ struct DrawData { |
+ SkCanvas* canvas; // reffed |
+ const SkPicture* picture; // reffed |
+ SkMatrix matrix; |
+ SkPaint* paint; // owned |
+ }; |
+ |
+ SkTDArray<DrawData> fDrawData; |
+}; |
+ |
+#endif |